Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding Haskell's fibonacci

fibs :: [Int]
fibs = 0 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs)]

This generates the Fibonacci sequence.

I understand the behaviour of the guards, of :, zip and tail, but I don't understand <-. What is it doing here?

like image 906
AR. Avatar asked Mar 08 '10 19:03

AR.


1 Answers

Due to the upvotes I made my comment into an answer.

What you see is not a guard but it is list comprehension. For starters think of it as a way to express a mathematical set notation like A = { x | x element N } which means something along the lines of: The set A is the set of all natural numbers. In list comprehension that would be [x | x <- [1..] ].

You can also use constraints on your numbers: [x | x <- [1..], x `mod` 2 == 0 ] and many other things.

There are alot of good haskell turorials out there that cover list comprehension and even a StackOverflow question regarding haskell resources.

like image 71
pmr Avatar answered Sep 28 '22 04:09

pmr