[plt-scheme] semantics of letrec in Lazy Scheme
On Jun 2, Keiko Nakata wrote:
>
> I am also looking at another behavior which I do not understand:
>
> > (define-values (v0 v1)
> > (letrec ([x (begin (set! y 4) (print 0) 0)]
> > [y (begin (print 1) 1)])
> > (values x y)))
> > (force v0)
> 00
> > (force v1)
> 11
>
> But I could think this is also a side-effect of the same optimization.
Yeah -- you can see the expected result if you change the last line to
something like:
(define-values (v0 v1)
(letrec ([x (begin (set! y 4) (print 0) 0)]
[y (begin (print 1) 1)])
(values x (begin 0 y))))
(FWIW, the lazy language needs some major overhaul which I didn't get
to yet. It might be possible to make it much faster without requiring
such an optimization.)
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://www.barzilay.org/ Maze is Life!