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]) [(+), (*), (-)]