In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] wrote: > In this post to c.l.scheme, Dorai Sitaram writes: > > letrec with set! is certainly different from letrec with Y, > and you don't need call/cc to distinguish the two. > > (define *keep-track* '()) > > (letrec ((fact (lambda (n) > (set! *keep-track* (cons fact *keep-track*)) > (if (= n 0) 1 > (* n (fact (- n 1))))))) > (fact 8)) > > and then do > > (eq? (car *keep-track*) (cadr *keep-track*)) > > If letrec is set!-based (as in Scheme), the > result is #t. If it is Y-based, the result is #f. Why > this is should be obvious if you mentally (or with > pencil) trace what Y does.
Does Haskell mfix count as Y? My implementation is mfix-based, and the above code returns 40320 #t. Try it yourself at <http://hscheme.sourceforge.net/interpret.php> if you don't believe me. I'd be very interested to know if my implementation of Scheme varies from R5RS due to this issue. -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe