折叠器中的lambda是做什么的?

时间:2017-02-20 22:55:05

标签: haskell

我正在通过Haskell book工作,我有点难以理解折叠。一个练习要求读者用elem编写foldr函数。我无法绕过它并用谷歌搜索一个例子,我现在试图理解这个例子。 foldr的类型签名是:

foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b

我找到的示例函数是:

myElem' :: Eq a => a -> [a] -> Bool 
myElem' a = foldr (\x y -> a == x || y) False

我的理解是,(\x y -> a == x || y)正在履行该类型的(a -> b -> b)部分,False正在履行b,而t a正在被隐含在免费中风格。

但是lambda本身就像现在一样神奇。我将其作为函数x读取,带有一个参数y将检查x(y) == a是否为myElem'作为参数提供的元素,并返回True或原始参数为{{ 1}}。这显然是胡说八道。我哪里错了?

1 个答案:

答案 0 :(得分:3)

\x y -> a == x || y是一个包含两个参数的函数,名为xy。只要Truea == xTruey,它就会返回True