Haskell - lambda表达式

时间:2014-03-06 09:38:47

标签: function haskell lambda

我试图了解什么是有用的以及如何在Haskell中实际使用lambda表达式。 我并不真正理解使用lambda表达式优于定义函数的常规方法的优点。 例如,我通常会执行以下操作:

let add x y = x+y

我可以直接打电话

add 5 6

得到11的结果 我知道我也可以做以下事情:

let add = \x->(\y-> x+y)

得到相同的结果。 但就像我之前提到的,我不明白使用lambda表达式的目的。 另外,我在前奏中输入了以下代码(无名函数?),它给了我一个错误信息。

let \x -> (\y->x+y)

parse error (possibly incorrect indentation or mismatched backets)

提前谢谢!

1 个答案:

答案 0 :(得分:17)

许多Haskell函数是“高阶函数”,即它们期望其他函数作为参数。通常,我们想要传递给这种高阶函数的函数在程序中仅在该特定点使用一次。使用lambda表达式比为此目的定义新的局部函数更方便。

以下是从给定列表中筛选所有大于10的偶数的示例:

ghci> filter (\ x -> even x && x > 10) [1..20]
[12,14,16,18,20]

这是遍历列表的另一个示例,每个元素x计算术语x^2 + x

ghci> map (\ x -> x^2 + x) [1..10]
[2,6,12,20,30,42,56,72,90,110]