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 表示式,引用變數 x
,y
的值為 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]) [(+), (*), (-)]