Function Haskell-lambda表达式

Function Haskell-lambda表达式,function,haskell,lambda,Function,Haskell,Lambda,我试图理解什么是有用的,以及如何在Haskell中实际使用lambda表达式。 我真的不明白使用lambda表达式比传统的函数定义方式有什么优势。 例如,我通常会执行以下操作: let add x y = x+y let add = \x->(\y-> x+y) 我可以打电话给你 add 5 6 得到11的结果 我知道我也可以做到以下几点: let add x y = x+y let add = \x->(\y-> x+y) 得到同样的结果。 但是就像我之前提到

我试图理解什么是有用的,以及如何在Haskell中实际使用lambda表达式。 我真的不明白使用lambda表达式比传统的函数定义方式有什么优势。 例如,我通常会执行以下操作:

let add x y = x+y
let add = \x->(\y-> x+y)
我可以打电话给你

add 5 6
得到11的结果 我知道我也可以做到以下几点:

let add x y = x+y
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]

这是有道理的!非常感谢。使用描述性名称,然后在
where
中定义,这样的易读性不是更好吗
filter myCompare[1..20]
map myTraverse[1..10]
。至于
let\x->(\y->x+y)
语句,
let
语句用于给事物命名。在最简单的形式中,该语句类似于
let name=expression
。从这一点开始,每次您想要引用表达式时,都要使用
name
。在您的示例中,
\x->(\y->x+y)
是一个表达式(函数类型的值)。因此,您的整个语句的形式为
let expression
,没有名称绑定。这样做毫无意义。让我们来表达什么?