2008年12月26日金曜日

【PAIP】22 Scheme: An Uncommon Lisp


  • Schemeの紹介をちょろちょろ。

  • 22.1 A Scheme Interprete
  • 簡易インタプリタ -> マクロ対応インタプリタ -> 末尾再帰インタプリタ -> 継続対応インタプリタ、の順で作っていくよ。
  • まず、簡易インタプリタ。
  • うむー、新しい知見はなし。今までやってきたことにすぎない。

  • 22.2 Syntactic Extension with Macros
  • Schemeにはマクロはないよ。えっと、この本がかかれたのは1990〜1992、するとそのときのSchemeはR4RSかな。のぞいてみると、Appendixで拡張として軽く触れらている程度だな。
  • さて、しかしderived expressionsを作るのにmacroは有効。そこでmacroを作るんだけど、Schemeの外(CL)につくる方針とするよ。
  • そしてCLのmacroを使っちゃうよ。
  • macroでspecial formを作っていくのは、言語が肥大化してもインタプリタやコンパイラをシンプルにしておくのに有効だよ。

  • 22.3 A Properly Tail-Recursive Interpreter
  • ここまでのインタプリタは、ホスト環境であるCLが末尾再帰最適化に対応していれば、末尾再帰最適化となるが、そうじゃなければそうならない。Schemeは末尾再帰最適化することが仕様でもとめられているので、それを実装する。
  • スタックオーバーフローしないためのポイントは2つ。ifとprocedure call。

次回は、22.4 Throw, Catch, and Call/cc から。おお、継続だ、懐しい。
こつこつ。

0 件のコメント: