<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Boon,<br class=""><div class=""><br class=""></div><div class="">I guess it is difficult to comprehend what scanl exactly does here.</div><div class="">If you see the definition of scanl from <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:scanl" class="">hackage</a></div><div class=""><br class="">scanl :: (b -> a -> b) -> b -> [a] -> [b]<br class="">scanl is similar to foldl, but returns a list of successive reduced values from the left:<br class="">scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, …]<br class=""><br class="">Think of calculating a running sum of the first 10 positive integers, it can be easily computed using scanl</div><div class="">λ> scanl (+) 0 [1..10]<br class="">[0,1,3,6,10,15,21,28,36,45,55]</div><div class=""><br class=""></div><div class="">For fibonacci, you calculate the nth number by adding n-1th number and n-2th number.</div><div class="">Lets try to unfold the definition of fibs</div><div class=""><br class=""></div><div class="">fibs  = 1 : scanl (+) 1 fibs</div><div class=""><br class=""></div><div class="">now first element of fibs is by definition, ofcourse</div><div class="">1 (say x1)</div><div class=""><br class=""></div><div class="">second element of fibs will be (the first element generated by scanl)</div><div class="">1 (i.e. z — say x2)</div><div class=""><br class=""></div><div class="">Third element of fibs will be calculated as (the second element generated by scanl)</div><div class="">z `f` x1 = 1 + 1 = 2 (say x3)</div><div class=""><br class=""></div><div class="">Fourth element will be (and also the 3rd element generated by scanl)</div><div class="">(z `f` x1) `f` x2 = (1 + 1) + 1 = 3 (say x4)</div><div class=""><br class=""></div><div class="">Fifth element will be</div><div class="">((z `f` x1) `f` x2) `f` x3 = ((1 + 1) + 1) + 2 = 5 (say x5)</div><div class=""><br class=""></div><div class="">and so on..</div><div class=""><br class=""></div><div class="">The elegance is of course achieved because of the lazy evaluation of the infinite list</div><div class="">Hope this makes it some what clear.</div><div class=""><br class=""></div><div class="">Regards, </div><div class=""><div class="">Apoorv<br class=""></div><br class=""><blockquote type="cite" class="">On 11-Oct-2016, at 23:23, Lai Boon Hui <<a href="mailto:laiboonh@gmail.com" class="">laiboonh@gmail.com</a>> wrote:<br class=""><br class="">Hi All,<br class=""><br class="">i am not very sure how this can work<br class="">fibs = 1 : scanl (+) 1 fibs<br class=""><br class="">Appreciate it if someone can guide me through by showing me a few steps of the function evaluation<br class=""><br class="">-- <br class="">Best Regards,<br class="">Boon Hui<br class="">_______________________________________________<br class="">Beginners mailing list<br class=""><a href="mailto:Beginners@haskell.org" class="">Beginners@haskell.org</a><br class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners<br class=""></blockquote><br class=""></div></body></html>