関数型言語の勉強にSICPを読もう - (60) 4章 - 超言語的抽象(220ページ) C++でSchemeインタプリタを作ろう9

前回の日記(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
}


できました!。良いコードですね(ぉ

※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404