-- Computes the n-th Fibonacci number fib1 :: Int -> Int fib1 n = if n == 0 then 0 else if n == 1 then 1 else fib1 (n - 1) + fib1 (n - 2) -- Computes the n-th Fibonacci number fib2 :: Int -> Int fib2 n = fib2iter 0 1 n fib2iter :: Int -> Int -> Int -> Int fib2iter fibn fibnp1 n = if n == 0 then fibn else fib2iter fibnp1 (fibn + fibnp1) (n - 1) -- Computes the n-th Fibonacci number fib3 :: Int -> Int fib3 n = iter 0 1 n where iter :: Int -> Int -> Int -> Int iter fibn fibnp1 n = if n == 0 then fibn else iter fibnp1 (fibn + fibnp1) (n - 1) -- Computes the n-th Fibonacci number fib4 :: Int -> Int fib4 n = let iter fibn fibnp1 n = if n == 0 then fibn else iter fibnp1 (fibn + fibnp1) (n - 1) in iter 0 1 n let1 = let x = 5 y = 6 in (x*y) + 12 let2 = (let x = 5 y = 6 in (x*y)) + 12 let3 = 12 + (let x = 5 y = 6 in (x*y)) let4 = 12 + (let { x = 5 ; y = 6 } in x*y) -- Checks whether a number is prime isPrim :: Int -> Bool isPrim n = n /= 1 && noSmallerDiv (n `div` 2) where noSmallerDiv m = m == 1 || (mod n m /= 0 && noSmallerDiv (m - 1))