計算機科学のブログ

関数型プログラミングの基礎 - コードの関数と関数型プログラミング - 関数型プログラミングの実用的価値 - 関数の制限、if/then/else

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT1(関数型プログラミングの基礎)、LESSON 2(関数と関数型プログラミング)、2.5(練習問題)、Q2-1、Q2-2、Q2-3の解答を求めてみる。

コード

sample.hs

-- Q2-1 関数は常に値を返さなければならないから

-- Q2-2
inc :: Num a => a -> a
inc n = n + 1
double :: Num a => a -> a
double n = n * 2
square :: Num a => a -> a
square n = n * n

-- Q2-3
-- even関数を利用
f :: Integral a => a -> a
f n = if even n then n - 2 else 3*n + 1
-- mod関数を利用(剰余関数)
g :: Integral a => a -> a
g n = if mod n 2 == 1 then 3 * n + 1 else n - 2 


main :: IO ()
main = do
    print (inc 0)
    print (inc 1)
    print (inc 5)
    print (double 0)
    print (double 1)
    print (double 5)
    print (square (-5))
    print (square 5)
    print (square (-1))
    print (square 1)
    print (square 0)
    print (f 0)
    print (f 1)
    print (f 2)
    print (f 5)
    print (f 6)
    print (g 0)
    print (g 1)
    print (g 2)
    print (g 5)
    print (g 6)

入出力結果(Terminal, Zsh)

% runghc sample.hs
1
2
6
0
2
10
25
25
1
1
0
-2
4
0
16
4
-2
4
0
16
4
%