僕は、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 件のコメント:
コメントを投稿