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

Reply via email to