-
- 讀到第三章即可,之後改讀 The Little Schemer。
-
- 程式語言必須提供底下三種功能:
- primitive expressions
- means of combination
- means of abstraction
-
When we discuss the implementation of procedures on register machines in chapter 5, we will see that any iterative process can be realized “in hardware” as a machine that has a fixed set of registers and no auxiliary memory. In contrast, realizing a recursive process requires a machine that uses an auxiliary data structure known as a stack.
-
- 將函式 (procedure) 視為資料 (data)。因此函式可以作為函式的參數或返回值。
- Lambda 表達式 (Lambda expression),又稱匿名函式 (Anonymous function)。
- Lambda 表達式可以在某處需要函式的地方,直接定義該函式,故稱 in-place anonymous procedure。
-
- 閉包 (Closure) 允許我們建構階層式的資料結構 (串列,樹,…)。
-
-
- 以物件的觀點對系統建模。程式語言必須提供賦值語句改變物件的狀態。
- 完全不使用賦值語句的編程,稱為函數式編程 (Functional programming); 與之相對的,稱為指令式編程 (Imperative programming)。因為程序員需要親自處理狀態,指令式編程較有機會出現錯誤。
-
- 在引入賦值語句後,函式調用從 substitution model of evaluation 換成 environment model of evaluation。在 environment model of evaluation,採用 frame 保存本地狀態。
-
- 資料可以修改後 (mutable),可以用來創建佇列,表,… 等資料結構。
-
- 在引入賦值語句後,程序員必須面對可隨時間改變的狀態。這在同步情況下又會引發一系列問題,主要原因在於不同進程可以透過賦值語句改變狀態,引入不確定性。
- 針對存取共享變數,引入 serializer。
-