インタプリタを作る

今の実装は一旦Schemeコードをコンパイル(schemescheme変換)する必要があって非常に使うのが面倒。せっかくのインタプリタなのだから、言語の中で完結したテスト用の実装が有るのが望ましい。
最初にいきなり躓いたのはquoteの逆、要するにシンボルを評価して値を得たかったけど、これをポータブルに実現するには自分でシンボルテーブルを作って管理する以外に方法が無い。けっきょくSchemeの上でSchemeインタプリタを書くのとあまり変わらない手間が。
もう一つは、define-packet-typeが提供するwith-手続き。フィールド"x"と"y"を持つ構造体pointをdefine-packet-typeで定義したとき、pointのインスタンスpoint1のxとyを表示するためには、

(with-point point1 (lambda ()
   (display x)
   (display y)))

のように書ける。これをコンパイラ時代はletとフィールドのbindに展開するコードを作るところまで面倒を見ていたけど、Schemeの枠内で実現するにはfluid-letを使いたい。しかしfluid-letを持つ処理系が意外と少なく、もう面倒だから以前書いたSchemeインタプリタをそのまま使ってしまおうかなという感じに。。
まぁ要するにマクロを使えば全部解決するけど。ただマクロを使うとコンパイラインタプリタのロジックを等価に保つのが難しそう。