function - Haskell - lambda 表达式

标签 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)

提前谢谢您!

最佳答案

许多 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]

关于function - Haskell - lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220439/

相关文章:

python - 在 python 的类中定义函数时的顺序是否重要

javascript - 如何构建特定时间的数据以便找到最近的点?

haskell - Haskell 中的分解守卫

haskell - 为什么 MaybeT 没有函数 `quit = fail ""`?

c - 将二维数组传递给 C 中的函数

使用函数更改指针包含的地址

haskell - 是的持久: get Entity value within hamlet

lambda - 从 Java8 lambda 返回相同的对象

lambda - 在 Java 8 中将不同类型映射合并为一个

scala - 在内联执行之前将 Scala lambda 表达式包装在 block 中(使用大括号和圆括号)可以实现什么目的?