
Take a look here
http://bm380.user.srcf.net/cgi-bin/stepeval.cgi?expr=let+fix+f+%3D+f+%28fix+...
.
The above webpage uses stepval https://github.com/bmillwood/stepeval, it
can evaluate any expression step by step using equational reasoning.
On 27 January 2015 at 11:54, Karl Voelker
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
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Regards Sumit Sahrawat