Coursera Programming Languages, Part A 華盛頓大學 Week 3
阿新 • • 發佈:2022-03-31
第三週主要介紹了 頭等函式 (First-class function) 與 函式閉包 (Function Closure)的概念。
頭等函式傳遞出一個重要的概念 :Functions are values,即函式可以作為引數傳遞,計算以及儲存。而 函式閉包 則是指函式可以使用定義在其之外的變數,這使得頭等函式的功能更為強大。
高階函式 (High-order function) 指以函式作為引數或以函式作為返回值的函式。
函數語言程式設計 (Functional programming) 的一些特點:
- Mutation avoided.
- Using functions as values.
Anonymous Function
匿名函式 (Anonymous Function) 是無名的函式,可以很方便的作為引數傳入其他函式。但由於其無名的特性,其不能實現遞迴。
(fn x => e)
我們可以這樣認為,關鍵字 fun
實際上是一種語法糖。如下:
fun x = e
val x = fn x => e
兩個表達實際是一致的。
在使用匿名函式時,要注意避免 Unnecessary function wrapping
fn x => tl x (* the same as tl *)
High-order function
這裡介紹幾個比較常用的高階函式,map filter zip
這些函式可以說是高階函式中的 hall of fame,在各個語言中都有出現
其中 map 將函式 f 應用到 list 中的所有元素上併產生一個新 list
fun map(f xs) =
case xs of
[] => NONE
| x :: xs =? f x :: map(f, xs)
filter 函式將 f 應用到 list 中的所有元素,保留其中 f 分析為 true 的元素