On Mar 28, 2007, at 12:51 PM, Joe Marshall wrote:
Since we're discussing the semantics of LETREC, I've always thought
it was
a wart in the language to specify LETREC in terms of SET! It would
be nice
if implementations were permitted (but not required) to implement
LETREC
in terms of a fixed-point operator as an alternative to SET!
Do you mean that an implementation should be allowed to treat E1 as E2
or E3 instead of E4?
E1=
(letrec ((fact (lambda (n) (if (zero? n) 1 (fact (- n 1))))))
(fact 5))
E2=
(fix ((fact (lambda (n) (if (zero? n) 1 (fact (- n 1))))))
(fact 5))
E3=
(let ([fact (Y (lambda (fact)
(lambda (n) (if (zero? n) 1 (fact (- n 1))))))])
(fact 5))
E4=
(let ((fact (unspecified)))
(let ((t (lambda (n) (if (zero? n) 1 (fact (- n 1))))))
(set! fact t))
(fact 5))
One advantage of this is that it would be much easier to create a
purely
functional subset of Scheme.
How do you do the following functionally?
(letrec ([f (g (lambda () f))])
f)
Aziz,,,
_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss