SICP問題4.19
式
(let ((a 1)) (define (f x) (define b (+ a x)) (define a 5) (+ a b)) (f 10))
を評価した時の望ましい結果について。
MITのScheme実装についてだけど、脚注に答えが書いてあるような。
原理的にはEvaが正しいが、実装が困難な場合、正しくない答えを出すより、Alyssaのいうようにエラーを出す方が良い、と。
Evaの解釈の実装については、遅延評価を行うようにすれば実装可能だと思われる。
define で delay を入れて、set!時にforceを入れるような形にするとか。
しかし、何故か今の評価器で実行するとエラーとならずに 20 という答えが出てしまいます…。謎だ…。