>>306
こないだC#で実装した(我流で)。
(define-syntax m (syntax-rules () ( (_ "constant" a (b (c ...)) ...) (a x (1 b ...) (c ...) ...))) というマクロがあり、
(m 1 (2 (3 4 5)) (a (b)) (x ())) というパラメータが渡されたとする。

マクロを解析すると、
パターン部は
((const "constant") (param a) (... (param b) (... (param c)))) というツリー構造になり、
テンプレート部は同じく
((param a) (var x) ((const 1) (... (param b)) (... (... (param c)))) となる。

パターンマッチはパターン部とマクロのパラメータを再帰的に比較すればよい。

適合するパターンが見つかったら、パラメータとパターンから
a:level0 data:1
b:level1 data:(2 a x)
c:level2 data:((3 4 5) (b) ())
という表を作り(このへんはGaucheのコメントを参考にしたような)、それをTemplate部に適用する

(param a) → テーブルからaの値を引いてくる。1を生成
(... (param b)) → ...(これの正式名称なんだっけ?)が出現したら、前述の表から……どうするんだっけ?
いま手元にソースがないので忘れたが、
b:level0 data:2
b:level0 data:a
b:level0 data:x
という3つの表を順番に生成して(param b)部に適用。
ネストした...も同様に再帰的処理して生成。