iT邦幫忙

0

Javascript SICP 1.1 - The Elements of Programming

  • 分享至 

  • xImage
  •  

任何強大的語言,都必須有三種機制:

基本表達式:語言最基本、最簡單的元!
組合的手段:如何把基本元素組合起來
抽象的手段:讓組合元素命名且可操作
Programing中,我們處理兩個元素:function 及 data,data是我們可以操作的東西,function是讓我們描述如何操作data的規則

Evaluating Operator Combinations

對 operand (運算元) 的組合進行求值
執行一個function,function中表示operator 操作 argument, argument 就是 operand 的值
由1.可以看出,為了實現一個Combinations的求值過程,還必須先對Combinations裡的每個元素進行相同的求值,這本身就是一個 “遞迴”的行為
例如:
(2 + 4 * 6) * (3 + 12);

我們可以採用樹的形式,每一個Combinations用一個有分支的節點表示,而operator與argument就是葉子的部分,求值過程可以想像,這些運算的值從葉子開始一直往上計算求值,然後在越來越高的層次中組合起來,可以看出 “遞迴”對於處理這種層次結構的 “樹”是非常有用的,稱為 “tree accumulation”。

functions

  1. 數字與運算是基本的數據與function(函數)

  2. Nesting of combinations提供了組合運算的手段

  3. Constant declarations 把名字跟值關聯起來,且提供一個有限制的抽象手段

Javascript的function declaration:

https://ithelp.ithome.com.tw/upload/images/20190509/20117516cXB7zPDupR.png

The Substitution Model for Function Application

對一個combination求值:
https://ithelp.ithome.com.tw/upload/images/20190509/20117516YWJwRFBZmD.png
對這個運算組合式求值,就像上述function所提,對組合式的各個元素求值,而後對arguments( the values of argument-expressions)執行一個function(value of the name)

EX: https://ithelp.ithome.com.tw/upload/images/20190509/20117516IMWdzhurBW.png

substitution model 對 f(5)求值

  1. applicative-order evaluation
sum_of_squares(a + 1, a * 2); -> sum_of_squares(5 + 1, 5 * 2);
square(6) + square(10); -> (6 * 6) + (10 * 10);
36 + 100; -> 136;
  1. normal-order evaluation
    另一種求值法 — 等到需要計算值時才計算,把function完全展開之後才求值
    https://ithelp.ithome.com.tw/upload/images/20190509/20117516R0uhIcHcdd.png

下面有一個超級酷的觀察求值的function,請收看的人一定要試試,可以先猜猜function會輸出什麼值(或是出現什麼動作)
EX 1.5
What behavior will Ben observe with an interpreter that uses applicative-order evaluation? What behavior will he observe with an interpreter that uses normal-order evaluation? Explain your answer.

https://ithelp.ithome.com.tw/upload/images/20190509/20117516tz0sxt9wOL.png


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言