Simpler Fibonacci function

Jeffrey R Lewis [email protected]
Tue, 5 Feb 2002 11:16:54 -0800


On Tuesday 05 February 2002 09:40 am, Brian Berns wrote:
> I am new to functional programming and teaching myself Haskell.  The
> canonical Haskell "fib" function (e.g. as presented in the "Gentle"
> tutorial) is:
>
>    fib = 1 : 1 : [ a+b | (a,b) <- zip fib (tail fib) ]
>
> This seems, to be polite, a bit overly complex.  By comparison, here
> is a simpler version:

As an aside, here's a nicer way of writing the stream version of fib:

    fib = 1 : 1 : [ a + b | a <- fib | b <- tail fib ]

This gets rid of the distraction of the zip and the pair, letting you see 
the simple structure of the definition more clearly.

This, however, is not Haskell 98 (the use of multiple generators separated 
by `|').  But it is supported by both GHC and Hugs (using flag -98).  See 
the sections in the user manuals under `parallel list comprehensions'.

--Jeff