1. 程式人生 > 其它 >Coursera Programming Languages, Part A 華盛頓大學 Week 3

Coursera Programming Languages, Part A 華盛頓大學 Week 3

第三週主要介紹了 頭等函式 (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 的元素