Haskellでの階乗の書き方

関数型言語として有名だから一応書いておこうみたいなページです.

各一行目は,関数factは「Integer型の引数を受け取ってInteger型を返す関数である」といった感じの意味です.


if-then-elseで書くとこんな感じ

fact :: Integer -> Integer
fact x = if x == 0 
     then 1 
     else x * fact (x - 1)

パターンマッチングで書くとこんな感じ

fact :: Integer -> Integer
fact 0 = 1
fact x = x * fact (x - 1)

数式っぽくガードで書くとこんな感じ

fact :: Integer -> Integer
fact x | x == 0     = 1
       | otherwise  = x * fact (x - 1)

要するにこういう意味です. \[ f(x)=\left\{ \begin{aligned} & 1 &(x = 0)\\ & x\times f(x-1) &(otherwise) \end{aligned} \right. \]

Tweet