R6RS翻訳と伝統的なマクロの実装 - Scheme VM を書く
土日はR6RSの7-8章の翻訳をしていた。
ライブラリとかトップレベルとか新しい概念があり英語だと頭に入らないのでまずは日本語に。
まだ一度も見直していないのでいろいろ揺れていますが
に置いてあります。もう少しまとめてからR6RS:翻訳 - Wilikiに置かせてもらおうと考えています。
- 文意は理解できているが日本語として整っていないところ→多数
- そもそも理解が怪しい→数ヶ所
を直さないと。
翻訳だけだと面白くないので2時間ほど時間をとり伝統的マクロをサポートしました。
展開は pass1 で行い
- define-macro を見つけたら(マクロ名 右辺のクロージャのコンパイル結果)という対を保持
- (マクロ名 args ...) を見つけたら args ... を引数に上のクロージャを呼び出し結果をコンパイルしその場にあったかのように展開する
という実装(あっているよね?)。
実装自体は10分くらいで終わったのだけど apply の実装にバグがあってそれのせいで時間がかかった。
これでやっとコンパイラでマクロが使えます。