状態遷移

Let Over Lambda を読むと、再びマクロが行えることの大きさが気になってきた。(今のところ LOL は難しくて半分も読めていないけど)

今やろうとしていることは、SECDマシンの論文にまとめられている、綺麗な状態遷移の定義表。あれがそのままプログラムになることだ。
SECD の定義はリスト表記そのものなので、難しくはないし手で書いたほうが早い。だけど、データで書けるようになると、プログラムを拡張する際に一カ所だけを修正すればよくなる。
一度必要十分なデータが定義できるようになれば、そのデータの解釈を変えるだけどインタプリタvm+インタプリタも簡単に書ける、のではないだろうか。

  • 論文と定義を一字一句同じにしようと思ったが、論文は大文字小文字で命令 NIL と空の nil を使い分けており、CL では区別できなかった。リードマクロで解決できるかもしれないけど、キーワードでごまかし中。
  • 「補助的な関数」としてさらっと書いている locate とかがうまく定義できるかちょっと怪しい。