関数型プログラミングの基礎 - 高階関数 - リストのフィルタリング
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT1(関数型プログラミングの基礎)、LESSON 9(高階関数)、9.3(リストのフィルタリング)、クイックチェック9-1の解答を求めてみる。
コード
sample1.hs
main = do
print $ remove even [1 .. 10]
print $ remove1 even [1 .. 10]
print $ remove2 even [1 .. 10]
print $ remove3 even [1 .. 10]
remove :: (a -> Bool) -> [a] -> [a]
remove test [] = []
remove test (x:xs) = if test x
then remove test xs
else x:remove test xs
remove1 :: (t -> Bool) -> [t] -> [t]
remove1 test xs = filter (\x -> not (test x)) xs
remove2 :: (t -> Bool) -> [t] -> [t]
remove2 test = filter (\x -> not (test x))
remove3 :: (a -> Bool) -> [a] -> [a]
remove3 test = filter (not . test)
入出力結果(Terminal, Zsh)
% runghc sample1.hs
[1,3,5,7,9]
[1,3,5,7,9]
[1,3,5,7,9]
[1,3,5,7,9]
%