这个foldr中的lambda是什么?

问题描述:

我正在通过Haskell book我的方式,我有点难以理解折叠。一个练习要求读者用foldr编写elem函数。我无法把头转向它并搜索一个例子,现在我正在试着理解它。对于foldr类型签名是:这个foldr中的lambda是什么?

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正在履行bt a是被暗示在无点的风格中。

但是,lambda本身就像刚才那样。我将它作为一个函数x读取,其中一个参数y将检查是否x(y) == a,作为参数提供的元素为myElem',并返回True或原始参数为x。这显然是无稽之谈。我哪里错了?

+0

Lambdas是匿名的。 'x'不是函数的名字,而是其中的一个参数。 – duplode

\x y -> a == x || y是一个带有两个参数的函数,分别命名为xy。无论何时a == xTrueyTrue,它都返回True

+1

也许用明确的亲代方法'\ x y - >(a == x)||看起来更容易一些。 y' – epsilonhalbe

+1

好的,'y'只是折叠的累计值,'x'是折叠结构的头部? –

+0

@GarryCairns你明白了。 –