0
我正在嘗試使用foldr
函數在Haskell中創建elem
函數的新實現。如何使用Haskell中的foldr函數在無限列表中查找元素?
到目前爲止,我有這樣的:
count :: Eq a => a -> [a] -> Integer
count x (y:ys) = foldl (\counter y -> if y == x then counter + 1 else counter) 0 ys
count _ [] = 0
elem' :: Eq a => a -> [a] -> Bool
elem' x (y:ys) = foldr (\i elem-> if (count x (y:ys)) > 0 then True else False) False ys
elem' _ [] = False
的count
功能的計時x的occurances的使用foldl
數(函數我寫的)。這對於有限列表來說工作得很好,但問題是我想利用foldr
無限列表的延遲計算。如果我嘗試使用無限列表作爲輸入,程序將永遠掛起。
基本上我想「爆發」,一旦我找到列表中的任何實例並返回true,否則返回false。
感謝您的幫助。
是的,嘗試使用'foldr'而不是'foldl'。雖然計算一個無限列表總是會掛起。我不確定你爲什麼要爲'elem'實現使用'count'? – Bergi
您在該lambda中既不使用'i'也不使用'elem'。那麼你究竟在摺疊什麼?此外,如果您使用摺疊,則不應使用結構遞歸(與模式匹配) – Bergi
嘗試'elem'x = foldr(\ el elemInRest - > el == x || elemInRest)false' – Bergi