関数型言語の勉強に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 }
できました!。良いコードですね(ぉ
計算機プログラムの構造と解釈
posted with amazlet on 06.05.31