这个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
正在履行b
和t a
是被暗示在无点的风格中。
但是,lambda本身就像刚才那样。我将它作为一个函数x读取,其中一个参数y将检查是否x(y) == a
,作为参数提供的元素为myElem'
,并返回True或原始参数为x
。这显然是无稽之谈。我哪里错了?
\x y -> a == x || y
是一个带有两个参数的函数,分别命名为x
和y
。无论何时a == x
为True
或y
为True
,它都返回True
。
也许用明确的亲代方法'\ x y - >(a == x)||看起来更容易一些。 y' – epsilonhalbe
好的,'y'只是折叠的累计值,'x'是折叠结构的头部? –
@GarryCairns你明白了。 –
Lambdas是匿名的。 'x'不是函数的名字,而是其中的一个参数。 – duplode