Let's start Scheme

2011-04-14

段々

無理ゲーになってきた感がある。> syntax-caseの実装

とりあえず考えをまとめる。
まずは現状の問題点。

  • 展開結果にer-macro-transformarが使えない。
    • renamingに環境が必要だが、syntax-caseがネストした場合どうする?
  • 地味にsyntaxの方が問題になる
    • syntaxが実際のtemplateを書き出すのだが、別にした場合に上記のrenamingの問題が発生する
  • (syntax-case (list e0 ...) ...)というsyntax-case
    • マッチ対象が展開されている必要がある。
      • 展開をどうする?
    • マッチ対象のコンパイル時環境をどうするか。
      • 一発で展開すると環境が捕捉できない
      • lazy(コンパイラに任せる)にするとどうなる?
  • その他、自分の力不足
    • 正直これが一番大きい・・・
まぁ、まだいくつかありそうだがとりあえずこれくらいで。
4つ目はいかんともしがたいとして、どうしようかね。

現状挑戦したのが展開時に中に含まれるマクロを全部展開しようとしたのだが、上手くいかなかった。
問題はsyntaxで、templateの展開が上手くいかない。
単純なのはいいのだけど、with-syntaxを使ったのとか、別のマクロがネストしててそのなかで構文オブジェクトを返そうとすると上手くいかない。
(単に展開のやり方がまずいのだろうけど、ごちゃごちゃしてきて理解の範疇を超えた・・・)

煩雑になるのは望むところではないのと、ライブラリがコンパイラのついて知っていないといけないというのは気持ち悪いので、syntax-case展開時にマクロを検知、展開するのはやめる方向にしよう。

問題はsyntaxが持つtemplateをどうするかだ。
後にしよう・・・

No comments:

Post a Comment