Работа через Learn You a Haskell For Great Good , в главе о функциях высшего порядка автор проходит через реализацию нескольких различных библиотечных функций. Когда мы подошли к определению фильтра '
(повторная реализация стандартной библиотечной функции 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 это более идиоматично? Что-нибудь еще?