2009年9月1日火曜日

gosh,chezでの defmacro

僕は、scheme処理系として、gosh , kawa, petite-chez-scheme の三つを使っているのだが、 このうち、goshと petite にはデフォルトでdefmacroがない。
マクロ定義のソースファイルを処理系で同じにしたいので、goshとpetiteでの defmacroの定義方法を調べてみた。

goshでは define-macroを使って簡単にdefmacroらしきものが定義できた。
  (define-macro (defmacro name arglst . bodies)
    `(define-macro ,(cons name arglst) ,@bodies))

petiteには、define-syntax系の健全なマクロしかない。 syntax-caseというのを使えば何でも定義できそうだが、 syntax-case構文はなんだかとっても難しそうで僕の理解範疇を超えている。
幸いにも、petiteのダウンロードパッケージの中に、 examples/compat.ss というファイルがあり、この中に、 syntax-caseで定義したdefine-macroとdefmacroのソースをみつけた。 これをそのまま使えばなんとかなりそうだ。

0 件のコメント:

コメントを投稿