Gauche > Archives > 2019/07/19

2019/07/19 06:13:47 UTCkaki
#
(write (letrec ((x (lcons 0 x))) x)) すると返ってこないんですが、これってやっちゃ駄目なんですか?
#
(letrec ((x (lcons 0 x))) (eq? x (cdr x))) ; => #f これ意外でした
2019/07/19 13:32:37 UTCshiro
#
lconsって単に(delay (cons a b)) ではなくて、ストリームのnextが毎回新しいconsを産み出すジェネレータになるので、ストリームのspineは循環しないです。
2019/07/19 14:00:13 UTCkaki
#
なるほど、先にジェネレータにしてしまうんですね。納得です。
#
gosh> (macroexpand '(lcons 0 1))
(#<identifier gauche.internal#%lcons.1e3c080> 0 (lambda () 1))
gosh> (with-module gauche.internal %lcons)
#<closure (%lcons item thunk)>