Haskell for Perl ProgrammersBasic ExamplesRecursion

2.1. Recursion

Length

--  Type declaration : 
--      [a] - a linked list of any type
--      x -> y - function that accepts x and returns y
mylen :: [a] -> Integer
-- Declare the length of the empty list to be 0
mylen [] = 0
-- x:xs == the list whose first item (the head) is x and the rest (the tail)
-- is xs.
mylen (x:xs) = 1 + (mylen xs)

Fibonacci (Braindead)

fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib a = (fib (a-1)) + (fib (a-2))

Fibonacci (Less Braindead)

-- (a,b) is a tuple whose first element is a and its second is b
fibo_helper :: Integer -> (Integer,Integer)

fibo_helper 0 = (0,1)
-- Notice the use of the closure (where) to assign two temporary values
fibo_helper n = (b,a+b) where
    (a,b) = fibo_helper (n-1)

-- (fst (a,b)) = a
fibo n = (fst (fibo_helper n))

Written by Shlomi Fish