syntax-rulesへの道
Techメモ
実装するまえにやったほうが良いこと
- define-macroを実装する
- R7RSにはないけど、マクロというものを理解するためにまず作ったほうが良い
- これ(+gensym)があれば実用上なんとかなる場面も多い
- syntax-rules以外もサポートするのか決める
- R7RS compatを目指すだけならsyntax-rulesだけ実装すれば実績解除
- マクロにこだわりがある人は、オリジナルの低レベルマクロシステムをまず用意して、その上にsyntax-rules, explicit-renaming, implicit-renaming, syntax-caseなどを乗せたりする
- syntax-caseを実装すれば、syntax-rulesは簡単に作れる
参考資料
- アリスプの少女 ハイジニックマクロ
- 要点が簡潔にまとまっている
- 『ビューティフルコード』25章
- syntax-caseの実装(アルゴリズム)についての解説
- see also: Writing Hygienic Macros in Scheme with Syntax-Case
- http://practical-scheme.net/gauche/man/gauche-refj/makuro.html
- http://community.schemewiki.org/?syntactic-closures
- syntax-case(R6RS)
- SRFI 93 とはどう違うのかなぁ
- Racketのマクロのページ
- syntax-rules等
...
を利用して連番の名前生成ができる
- TSPL4 syntax-rules, syntax-case
- http://www.cs.indiana.edu/chezscheme/syntax-case/
- プログラミング言語 Scheme の解説
syntax-rulesの何が大変なのか
自動で名前衝突を回避する機能があるので大変
仕様には「こうあるべき挙動」だけが書いてあって、どのように実装するかは書いていない