Gauche > Archives > 2014/01/02

2014/01/02 04:03:27 UTC齊藤
#
> Scheme的には(f <expr>)でfが未定義でもエラーにはできないんです。<expr>が他の継続を呼び出す可能性があるので。
#
とのことですが、 f と <expr> のどちらが先に評価されるかは決まっていないのですから f の方を先に評価する処理も許されるはずで、 <expr> がどういう継続を呼出すかにかかわらず f が未定義ならエラーにしてよいと思うのですがどこか間違ってますか?
#
束縛されていない変数を参照することはエラーとあるので、逆に言えば参照するまではエラーではないということから事前 (コンパイル時) にエラーとすることが出来ないということにかわりはないですけど。
2014/01/02 04:49:19 UTCshiro
#
そうか。fが手続きにならない場合でも呼び出すまでエラーに出来ないけど、「fが未定義」であることは呼び出すかどうかとは関係ないのか。
#
私の頭にあったのは、以前c.l.sか何かであった (0 (proc 1))をエラーにすべきかどうか、という議論で、procが戻ってこない場合はエラーにしないのが正しい動作であるということが表示的意味論から導ける、なんて結論だったんですが、operatorを評価した時点で未定義であればエラーにできますね。
#
てことはoperatorがGREFの場合だけ先行して束縛チェックをするkoguroさんのアイディアはありだな。