01 July, 2006

[Haskell] Exercise 4.5, 4.6

ようやく再帰の話とかが出てきました。

rangeProduct :: Int -> Int -> Int
rangeProduct m n
| m > n = 0
| m == n = n
| otherwise = m * rangeProduct (m+1) n

Main> rangeProduct 4 3
0
Main> rangeProduct 4 4
4
Main> rangeProduct 4 5
20
Main> rangeProduct 4 6
120
Main> rangeProduct (-3) (-1)
-6
Main> rangeProduct (-3) 3
0
Main>

fac を rangeProduct を使って定義する。負の引数に対してエラー表示と、0に対して 0! = 1 を返す様にする必要。

fac :: Int -> Int
fac n
| n < 0 = error "fac only defined on natural number"
| n == 0 = 1
| otherwise = rangeProduct 1 n

Main> fac (-1)

Program error: fac only defined on natural number

Main> fac 0
1
Main> fac 1
1
Main> fac 5
120
Main>

No comments: