トップ «前の日記(2007-10-09) 最新 次の日記(2007-10-24)» 編集

Route 477



2007-10-21

[scheme] 4つのマクロ

Lisp/Schemeのマクロには define-macro, defmacro, syntax-rules(define-syntax), syntax-caseの4つの系列があり、 現在のGaucheではdefine-macroとsyntax-rulesが使える。

で、[Gauche-devel-jp] Re: define-macroをdefine-syntaxに直すには? から予測したのだが、

  1. define-macroはLisp由来のマクロで、hygenicではないが、展開中にScheme式の評価が使える。
  2. defmacroはLisp由来のマクロで、hygenicであり(gensymという関数を使う)、Lisp式の評価が使える。
  3. syntax-rulesはScheme(R5RS)由来のマクロで、hygenicであるが、Scheme式の評価は使えない。
  4. syntax-caseはScheme(R6RS, srfi-93)由来のマクロで、hygenicであり、Scheme式の評価が使える。

という理解で良いのだろうか。