Jun Inoue
jun.l****@gmail*****
2005年 8月 11日 (木) 18:03:19 JST
(define x 1) (letrec ((a x) (b a)) b) --> x となります。この letrec の書き方自体が R5RS 違反なんですが、ここは黙って 予想外な動作をするよりエラーを出した方がいいように思います。どう思われま すか? と言いつつ既にパッチを書いたわけですが、パッチでは、 init の評価が済む まで全部 unbound に bind してあって、symbol_value でそれを検出してありま す。ついでに letrec のフレームを特別扱いせずに済んでいます(っていうかこ れは試行錯誤の跡っぽいですが)。 ENV_ とか FRAME とかマクロを定義してるのは、一応 env 関係の関数の外で直 接リストをいじるのがはばかられたからですが、普通に env pop -> 積み直しで もいいかもしれません。 ちなみに guile では上記コードは unbound variable: a というエラーが出ま す。 Gauche では意図どおりの動作をします。不思議なことに前方参照も OK で す。でも (letrec ((a b) (b a)) b) ってやると固まります。 -- Jun Inoue jun0****@users***** -------------- next part -------------- 文字コード指定の無い添付文書を保管しました... 名前: sscm-letrec.diff 下載