Let's start Scheme

2012-07-12

マクロ、マクロ、マクロ・・・

マクロの不具合を少しでも潰していこうと思っているのだが、いろいろげんなりしてきた。

とりあえず、現状でもっとも問題になっているのは、free-identifier=?とbound-identifier=?が正しく動いていないこと。後者はあんまり気にしていないんだけど、前者がまずい。(どうでもいいけど、この2つの手続きは、手続き名から何をするのかあんまり想像できない気がする)。

free-identifier=?は(理解が間違っていなければ)、引数としてとった2つの識別子が同一のオブジェクトを指していれば#tを返す手続き。基本的にグローバルなオブジェクトなら単に名前が一緒とかで十分なんだけど、ローカルに束縛されたものの解決が現状うまくいっていない。

マクロ内で束縛した環境はとりあえず放っておいて、コンパイル時環境だけ探せばいいだろうか?とりあえずやってみることにしよう。

かなりゴリゴリと直した。主に、free-identifier=?なのだが。まだ、スコープは曲がらないけど。

Sagittariusはマクロ展開時にシンボルのリネームをするのではなく、識別子をぽこぽこと作る。その際に、ちょっとした細工をして、無理やり展開時のいろんなものを解決している。with-syntaxとかで作られたpattern variableとかとか。
この辺正直もっときれいにしたいのだが、いかんせん理解が足りないのと技量が足りないのがあいまって根本的な解決ができない。
syntax-case、使う分には便利なんだけど、実装するのは辛すぎる。

No comments:

Post a Comment