
Am Freitag, 30. Januar 2009 15:59 schrieb Ertugrul Soeylemez:
Daniel Fischer
wrote: Not to forget the marvellous
import Control.Monad.Fix
fibs :: [Integer] fibs = fix ((0:) . scanl (+) 1)
I don't like that one. My favorite is the following, because it's short, concise and still very comprehensible:
import Data.Function
fibs :: Num i => [i] fibs = fix (\r x y -> x : r y (x+y)) 0 1
But that's too easy to understand! What a waste of fix, sheesh ;-) My favourite is fibs = 0:1:zipWith (+) fibs (tail fibs) clear, elegant, accessible. But I also like the other one, precisely because, unless one is very experienced, one has to do a few rounds of "Wait, how on earth does this work?" before it clicks.
Replace 0 by 1, if you want to exclude it from the sequence. I prefer to include it.
Yep. Much more natural if the powers match the index.
Greets, Ertugrul.
Cheers, Daniel