<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hmm... here are the functions I was looking to trace, the second one being an example from Scheme text "Concrete Abstractions" that I rewrote after seeing the first. Compared to the CL/Scheme memoization code, the Haskell seems like, how shall I put this, a sleight of hand, so much so that I'm driven to look behind the scenes to try to understand what is occurring. I remember that someone said, pattern matching is strict and LET is lazy, so I know the trick depends on laziness, but knowing that and understanding it are still a world apart.<br><br>Does tracing a function *always* require memoizing it?<br><br>Michael<br><br>memo_fib :: Int -&gt; Integer<br>memo_fib =<br>&nbsp;&nbsp; let fib 0 = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fib 1 = 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fib n = memoized_fib (n-2) + memoized_fib (n-1)<br>&nbsp;&nbsp; in&nbsp; (map
 fib [0..] !!)<br><br>memo_walk_count :: Int -&gt; Integer<br>memo_walk_count =<br>&nbsp;&nbsp; let walk_count 0 = 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; walk_count 1 = 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; walk_count n = memo_walk_count (n-2) + memo_walk_count (n-1)<br>&nbsp;&nbsp; in (map walk_count [0..] !!)<br><br>&nbsp;<br><br>--- On <b>Thu, 12/24/09, Daniel Fischer <i>&lt;daniel.is.fischer@web.de&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Daniel Fischer &lt;daniel.is.fischer@web.de&gt;<br>Subject: Re: [Haskell-cafe] trace<br>To: haskell-cafe@haskell.org<br>Cc: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Date: Thursday, December 24, 2009, 3:52 PM<br><br><div id="yiv1755006913">
<style type="text/css">
#yiv1755006913 p, #yiv1755006913 li {white-space:pre-wrap;}
</style><p style="margin: 0px; text-indent: 0px;">Am Donnerstag 24 Dezember 2009 21:31:34 schrieb michael rice:</p>
<p style="margin: 0px; text-indent: 0px;">&gt; Can someone provide a simple example of tracing a function.</p>
<p style="margin: 0px; text-indent: 0px;">&gt;</p>
<p style="margin: 0px; text-indent: 0px;">&gt; Michael</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">Is</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">import Debug.Trace</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">infixl 0 `debug`</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">debug = flip trace</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">dfib :: Int -&gt; Integer</p>
<p style="margin: 0px; text-indent: 0px;">dfib =</p>
<p style="margin: 0px; text-indent: 0px;">    let fib 0 = 0</p>
<p style="margin: 0px; text-indent: 0px;">        fib 1 = 1</p>
<p style="margin: 0px; text-indent: 0px;">        fib n = dfib (n-2) + dfib (n-1) `debug` "eval fib " ++ show n</p>
<p style="margin: 0px; text-indent: 0px;">    in (map fib [0 .. ] !!)</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">*MFib&gt; dfib 12</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 12</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 10</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 8</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 6</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 4</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 2</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 3</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 5</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 7</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 9</p>
<p style="margin: 0px; text-indent: 0px;">eval fib 11</p>
<p style="margin: 0px; text-indent: 0px;">144</p>
<p style="margin: 0px; text-indent: 0px;"></p>
<p style="margin: 0px; text-indent: 0px;">the kind of example you're looking for?</p></div></blockquote></td></tr></table><br>