
On 2008 Oct 15, at 18:51, Matthew J. Williams wrote:
fix (\rec n -> if n == 0 then 1 else n * rec (n-1)) 5 120
My interpretation: fix (\rec n -> if n == 0 then 1 else n * rec (n-1)) 5 ((\rec n -> if n == 0 then 1 else n * rec (n-1)) (fix (\rec n -> if n == 0 then 1 else n * rec (n-1)) )) 5 . . .
Yet, it does not quite explain how 'fix' does not result in infinite recursion.
Remember, Haskell is non-strict. When the computation reaches 0, the "then" branch of the conditional is evaluated and the "else" is unneeded and therefore ignored, so its re-invocation isn't seen. -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH