通過工作了解您一個Haskell偉大的好,筆者走過的幾個不同的庫函數的實現對高階函數的節。當來到filter'
(標準庫函數filter
的重新實現)的定義,我認爲很明顯的事情是這樣的:遞歸或列表理解?
filter' f xs = [x | x <- xs, f x]
但筆者給出以下較長,遞歸定義:
filter' _ [] = []
filter' p (x:xs)
| p x = x : filter' p xs
| otherwise = filter' p xs
兩個定義都做同樣的事情。這有什麼理由嗎?遞歸定義是否更高性能?對於Haskell來說它更習慣嗎?還有別的嗎?
'filter''也可以在高階函數'foldr'方面寫成'濾波器的」 p = foldr相似(\ X YS - >如果PX則x:YS別的YS)[]',雖然這將是一個使用高階函數的好例子,而不是如何從頭開始構建一個函數。 – hammar
如果您對如何解除它們感興趣,請參見[Haskell 2010>表達式>列表解析](http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-420003.11)。 –