参考リンク
http://www.willamette.edu/~fruehr/haskell/evolution.html
fact 0 = 1 fact n = n * fact (n - 1)
fact1 n | n < 2 = 1 | otherwise = n * fact1 (n - 1)
fact2 n = foldl (*) 1 [1..n]
fact3 n = foldr (*) 1 [1..n]
fact4 n = if (n == 0)
then 1
else n * fact (n - 1)
fact5 n = case n of
0 -> 1
x -> x * fact (x - 1)
fact6 n = foldl1 (*) [1..n]