no continuations

Ashley Yakeley ashley at
Fri Jan 9 15:48:13 EST 2004

In article <1073668638.3ffee21e290c4 at>,
 dvanhorn at 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 <>
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

More information about the Haskell-Cafe mailing list