[Haskell-beginners] Re: Understanding cached fibonnacci function
daniel.is.fischer at web.de
Fri Jan 30 10:24:07 EST 2009
Am Freitag, 30. Januar 2009 15:59 schrieb Ertugrul Soeylemez:
> Daniel Fischer <daniel.is.fischer at web.de> 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.
More information about the Beginners