<div dir="ltr"><div>Hello all,<br></div><div>I've been playing around with creating circular lists (and learning racket which has been quite fun), but I'm stumped on why the lazy version of letrec-values is not producing a promise like the lazy version of letrec does. With the lazy letrec I can create circular lists, but with the lazy letrec-values I get #<undefined>. See the example below. <br>
</div><div><br></div>;;;;;;;;;;;;;;;;; example code ;;;;;;;;;;;;;;;;;;;;;;;;;<br><div>#lang lazy<br><br>;; create a circular list using letrec (this works)<br>(define example-working<br>  (letrec ([A (list 'a B)]<br>           [B (list 'b A)])<br>
    B))<br>(displayln "Working Example:")<br>(displayln example-working)<br>(displayln (!! example-working))<br><br></div><div>; Prints...<br>;Working Example:<br>;(b #<promise:A>)<br>;#0=(b (a #0#))<br></div>
<div><br>;; create a circular list using letrec-values (this is broken)<br>(define example-broken<br>  (letrec-values ([(A) (values (list 'a B))]<br>                  [(B) (values (list 'b A))])<br>    B))<br>(displayln "Broken Example:")<br>
(displayln example-broken)<br>(displayln (!! example-broken))<br><br></div><div>; Prints<br>;Broken Example:<br>;(b (a #<undefined>))<br>;(b (a #<undefined>))<br></div><div>;;;;;;;;;;;;;;;;; end code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
<br></div><div>I realize that there are many different ways to generate circular lists, but why doesn't this work? Am I misunderstanding something or is this a bug?<br><br></div><div>Thanks,<br></div><div>Luke<br></div>
</div>