関数型プログラミングの基礎 クロージャと部分適用 中間演算子、if式、偶奇の判定、even関数
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON5(クロージャと部分適用)、5.5(練習問題)Q5-1の解答を求めてみる。
コード
inc :: Integer -> Integer
inc = (+ 1)
double :: Integer -> Integer
double = (* 2)
square :: Num a => a -> a
square x = x ^ 2
ifEven :: Integral p => (p -> p) -> p -> p
ifEven f x =
if even x
then f x
else x
ifEvenInc :: Integer -> Integer
ifEvenInc = ifEven inc
ifEvenDouble :: Integer -> Integer
ifEvenDouble = ifEven double
ifEvenSquare :: Integer -> Integer
ifEvenSquare = ifEven square
xs = [-5 .. 5]
main :: IO ()
main = do
print "inc"
mapM_ (print . ifEvenInc) xs
print "double"
mapM_ (print . ifEvenDouble) xs
print "square"
mapM_ (print . ifEvenSquare) xs
入出力結果(Terminal, Zsh)
% runghc sample1.hs
"inc"
-5
-3
-3
-1
-1
1
1
3
3
5
5
"double"
-5
-8
-3
-4
-1
0
1
4
3
8
5
"square"
-5
16
-3
4
-1
0
1
4
3
16
5
%