前回の日記(id:higepon:20060719:1153323855)で書いた悩みですが shiro さんから以下のようなコメントをいただきました。いつもありがとうございます。
(define func B)の時点でBを評価しないとまずいです。R5RS 5.2.1節。 その時点で(lambda (a) ”test”) は既にprocedureになってるわけですから、funcをルックアップしたら自然にprocedureが得られます。
R5RSを読みましょうというのが反省点。
早速実装してみました。
変更前
Object* Definition::eval(Environment* env)
{
env->defineVariable(variable_, value_);
return new Quote("OK"); // different from SICP's
}
変更後
Object* Definition::eval(Environment* env)
{
env->defineVariable(variable_, value_->eval(env));
return new Quote("OK"); // different from SICP's
}
できました!。良いコードですね(ぉ