`(Hello ,world)

ツッコミ、添削大歓迎です。いろいろ教えてください。

2009-03-31

PAIP22章 Schemeインタプリタ

Paradigms of Artificial Intelligence Programming の22章にCommon LispでのSchemeインタプリタの実装がある。22.1章で最小限のスペシャルフォームだけのインタプリタを実装して、22.2章でマクロを追加。

22.3章で「いままでのは末尾呼び出し最適化をサポートしてないからSchemeと呼べない」といってGOを使うように変更するんだけど、これが辛い。それまでのinterpでもbegin以外は末尾でinterpを呼び出してるからいいと思うんだけど。traceするとネストが深くなるのは末尾呼び出し最適化されててもちゃんと表示するためじゃなかったっけ。

CLは仕様で末尾呼び出しの最適化を保証してるわけじゃないから念のためということかな。「『構造化プログラミング』ではgoto文は有害だ、というけどこのケースでは下位レベルを効率的に実装するために必要だ」といってるけど、それにしても辛い。

3impの実装だと代入が発生する変数はbox化されるからこういう書き方すると逆に遅くなると思うんだ。

トラックバック - http://cadr.g.hatena.ne.jp/mokehehe/20090331