Return to Snippet

Revision: 47086
at June 1, 2011 00:44 by rtperson


Initial Code
fiblist = 0 : 1 : zipWith (+) fiblist (tail fiblist)

-- you can access members of this list as follows: 
-- fiblist !! 10
-- (returns 55)
-- fiblist !! 100
-- returns 354224848179261915075

Initial URL
http://www.haskell.org/haskellwiki/The_Fibonacci_sequence

Initial Description
I didn't invent this, but it's too cool a snippet not to capture. Here's a one-liner that will generate a list of Fibonacci numbers in linear time.

EXPLANATION: the colon operator is used to add elements to a list, so it starts out adding on the two base cases, zero and one. After you have these two, you can mathematically generate the rest of the list. The zipWith function takes two lists and combines them using a function (in this case, addition). The two lists in question are fiblist (that is, the list you're currently generating) and "tail fiblist" (that is, every element of the list after the first element). 

The only reason this works is because Haskell's laziness gives it the ability to define infinite lists. Haskell will never even attempt to calculate the nth Fibonacci number until it is asked to do so.

Initial Title
Fibonacci List One-Liner in Haskell

Initial Tags


Initial Language
Haskell