参考リンク
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]