On 3/28/07, Abdulaziz Ghuloum <[EMAIL PROTECTED]> wrote:
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))
Yes.
> 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)
With a lot of rewriting so that f can take a thunked version of itself
as an argument.
--
~jrm
_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss