ループ

今はBoostのshared_ptrを使ってるんだけど、これ使うとインテリセンスが対応できないみたいで残念。
参照カウントタイプのスマートポインタって循環した参照があると永遠に解放されなくなるから、そのうち真面目にGCを作らないといけない。そのうち…
さて、いよいよSchemeの式の評価をする部分を作るところに来た。というよりここからが本番。eval関数を作ればいいと。あと手始めに四則演算も作っておく。関数もオブジェクト。quoteは関数では無いのか。

かん境

さて、evalと四則演算はたぶんできた。引数は二つだけ。次はlambdaかな。束縛の代表選手はlambdaのようなので、環境の実装はこいつを作ろうとしながら考える。
構文と関数の区別はどうしよう。見た目に差がないし。というわけで、構文もオブジェクト。
Schemeのlambdaの構文って実装にやさしくできてるねぇ。3種類の引数の取り方は別に便利にするためだけに3種類というわけでは無かったのか。
define文は難しい。式の途中に登場するくせに環境を書き換える。すっきりした作り方が思い浮かばない。

applyって便利そう?

define,lambda,quote,apply,evalが動くようになった。
evalという名前をつけていた関数はapplyだった。ちょっと変だなぁと思いつつ試行錯誤していたものの、今はevalやlambdaはapplyを使って実装してる。