2008-01-08 軽量let その4 - Scheme VM を書く scheme 昨日 3imp のごく一部を和訳したら方法を思いついた。やっぱり英語を眺めているだけで余計に脳みそ使っているんだな。 整理 let1 a (lambda () b) 問題に関しては解決方法が見えてきた (lambda のコンパイル時に free 変数として locals( =( (a) ) も考慮して free 変数用にコンパイルする REFER_LOCAL 0 1 ARGUMENT CLOSURE のような感じ REFER_LOCAL / ARGUMENT は free 変数の push。 lambda 内では b は REFER_FREE 0 ENTER の前と後どちらで ARGUMENT を積むか 先に積んでおかないと frame のサイズにアクセスできない 現在は正しいつみかたになっているが refer 1 0 とコンパイルされてしまうのがおかしい 直した 難しい局面は脱した [ok]2種類の free variables の説明を加える [OK]stackvm37を消す [OK]テストを追加 [OK]テストを通せないものを吟味 wiki が動くかどうか? 動いた 最適化済みのコードも動く