Karl Voelker karl at karlv.net
Tue Jan 27 06:24:26 UTC 2015

```On Mon, Jan 26, 2015, at 08:43 PM, Animesh Saxena wrote:
> I stumbled across this example as a shiny way of explaining why Lazy
> eval matters....
>
> fact = fix \$ \f n -> if n == 0 then 1 else n * f (n-1) fix f =
> f (fix f)
>
> With lazy eval, I get
>
> fact 4 = fix \$ \f 4 (......)

Not quite. Let's go one step at a time:

fact 4 = (fix \$ \f n -> if n == 0 then 1 else n * f (n - 1)) 4

Now we can bring in the definition of fix, substituting the argument to
fix for all of the occurrences of f in the definition of fix. Notice
that we can't substitute the 4 for n yet.

fact 4 = ((\f n -> if n == 0 then 1 else n * f (n - 1)) (fix \$ \f n ->
if n == 0 then 1 else n * f (n - 1))) 4

I think if you are very patient and methodical about performing the
substitutions (and writing them out fully - no dot-dot-dot), then you'll
figure out how it all works.

-Karl

-------------- next part --------------
An HTML attachment was scrubbed...