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 getfact 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)) 4Now 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))) 4I 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