[Anthy-dev 2214] r5rs: letrec のバグ(?)

Back to archive index

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
下載 


Anthy-dev メーリングリストの案内
Back to archive index