I don&#39;t know exactly how to explain it, but it has to do with memoization<br><br>The first version generates a fully memoized function, while the second creates a memoized version for each call, since the thunk and memoization for fib is destroyed after each computation.<br>
<br>This is not a precise explanation, but I can&#39;t think of a better way to put it...<br><br><br><div class="gmail_quote">On Thu, Jan 29, 2009 at 16:18, Patrick LeBoutillier <span dir="ltr">&lt;<a href="mailto:patrick.leboutillier@gmail.com">patrick.leboutillier@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi all,<br>
<br>
I recently stumbled on this example in some wiki:<br>
<br>
mfib :: Int -&gt; Integer<br>
mfib = (map fib [0 ..] !!)<br>
 &nbsp; where fib 0 = 0<br>
 &nbsp; &nbsp; &nbsp; &nbsp; fib 1 = 1<br>
 &nbsp; &nbsp; &nbsp; &nbsp; fib n = mfib (n-2) + mfib (n-1)<br>
<br>
I don&#39;t understand how the results get cached. When mfib is<br>
recursively called, doesn&#39;t a new (map fib [0 ..] !!) start over<br>
again? Or perhaps I&#39;m thinking too imperatively here...<br>
<br>
Also, if I change the definition to this (adding &quot;a&quot; on both sides):<br>
<br>
mfib :: Int -&gt; Integer<br>
mfib a = (map fib [0 ..] !!) a<br>
 &nbsp; where fib 0 = 0<br>
 &nbsp; &nbsp; &nbsp; &nbsp; fib 1 = 1<br>
 &nbsp; &nbsp; &nbsp; &nbsp; fib n = mfib (n-2) + mfib (n-1)<br>
<br>
the funtion becomes slow again. Why is that?<br>
<br>
<br>
Thanks a lot,<br>
<br>
Patrick LeBoutillier<br>
<font color="#888888"><br>
--<br>
=====================<br>
Patrick LeBoutillier<br>
Rosemère, Québec, Canada<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Rafael Gustavo da Cunha Pereira Pinto<br>Electronic Engineer, MSc.<br>