Рекурсия или понимание списка?

Работа через 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 это более идиоматично? Что-нибудь еще?

9
задан JSBձոգչ 9 July 2011 в 17:43
поделиться