#!/usr/bin/runghc module Recursion02Factorial where import Data.List -- Four different versions of Factorial(n): factInf :: Int -> Integer factInf n = product (take n [1 ..]) factRec :: Integer -> Integer factRec 0 = 1 factRec n = n * factRec (n - 1) factTail :: Integer -> Integer -> Integer factTail 0 sum = sum factTail n sum = factTail (n - 1) (n * sum) factFoldl :: Integer -> Integer factFoldl n = foldl' (*) 1 [1 .. n] main :: IO () main = do print (factInf 5) print (factInf 10) print (factRec 5) print (factRec 10) print (factTail 5 1) print (factTail 10 1) print (factFoldl 5) print (factFoldl 10)