2017-02-20 49 views
1

我正在通過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

回答

3

\x y -> a == x || y是一個帶有兩個參數的函數,分別命名爲xy。無論何時a == xTrueyTrue,它都返回True

+1

也許用明確的親代方法'\ x y - >(a == x)||看起來更容易一些。 y' – epsilonhalbe

+1

好的,'y'只是摺疊的累計值,'x'是摺疊結構的頭部? –

+0

@GarryCairns你明白了。 –

相關問題