match-extensions を記述するためのヘルパー マクロを作成したいと考えています。私はこのようなものを持っています:
(define-match-expander my-expander
(λ (stx)
(let* ([dat (cdr (syntax-e stx))]
[var1 (car dat))]
[var2 (cadr dat)])
;transformer goes here )))
したがって、この let バインディングを実行するマクロが必要でした。私はこのようなものから始めました:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(match-let ([(vars ...) (cdr (syntax-e stx))])
body))))
ただしmatch-let
、変換時間には定義されていません。
最初の質問は、これを行う他の方法はありますか (つまり、このエキスパンダーを作成する)? おそらく、私が気付いていない plt-scheme に似たようなものがすでにあるか、または何らかの方法で間違っている可能性があります。
最初の質問に対する回答に関係なく、変数のリストをマクロ内の値のリストにバインドしたい場合は、どうすればよいですか?
編集: Eli の回答マクロと組み合わせると、次のようになります。
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(syntax-case stx ()
[(_ vars ...)
body]))))