計算機科学のブログ

関数型プログラミングの基礎 高階関数 リストのフィルタリング

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON9(高階関数)、9.3(リストのフィルタリング)のクイックチェック 9-1の解答を求めてみる。

コード

remove :: (a -> Bool) -> [a] -> [a]
remove _ [] = []
remove f (x : xs) =
  if f x
    then remove f xs
    else x : remove f xs

nums :: [Integer]
nums = [-5 .. 5]

main :: IO ()
main = do
  print nums
  print $ remove even nums
  print $ remove odd nums

入出力結果(Terminal, Zsh)

% runghc sample01.hs
[-5,-4,-3,-2,-1,0,1,2,3,4,5]
[-5,-3,-1,1,3,5]
[-4,-2,0,2,4]
%