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 という答えが出てしまいます…。謎だ…。