Lambda 表示式

Lambda 表示式與其他語言中的匿名函式類似。

Lambda 表示式是開放式公式 ,它還指定要繫結的變數。然後通過用使用者提供的引數替換 lambda 表示式主體中的繫結變數來實現評估(找到函式呼叫的值)。簡而言之,lambda 表示式允許我們通過變數繫結和替換來表達函式。

Lambda 表示式看起來像

\x -> let {y = ...x...} in y

在 lambda 表示式中,箭頭左側的變數被視為在右側繫結,即函式的主體。

考慮數學函式

f(x) = x^2

作為 Haskell 定義,它是

f    x =  x^2

f = \x -> x^2

這意味著函式 f 相當於 lambda 表示式\x -> x^2

考慮高階函式 map 的引數,即 a -> b 型別的函式。如果在呼叫 map 時只使用一次,而在程式中沒有其它地方,則將其指定為 lambda 表示式而不是命名這樣的一次性函式是很方便的。寫成 lambda 表示式,

\x -> let {y = ...x...} in y

x 的值為 a...x... 是一個 Haskell 表示式,引用變數 xy 的值為 b。因此,例如,我們可以編寫以下內容

map (\x -> x + 3)

map (\(x,y) -> x * y)

map (\xs -> 'c':xs) ["apples", "oranges", "mangos"]

map (\f -> zipWith f [1..5] [1..5]) [(+), (*), (-)]