我想制作一个用于编写匹配扩展的帮助宏。我有这样的想法:
(define-match-expander my-expander
(λ (stx)
(let* ([dat (cdr (syntax-e stx))]
[var1 (car dat))]
[var2 (cadr dat)])
;transformer goes here )))
所以我想要一个宏来完成这个让绑定。我从以下内容开始:
(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方案中已经有一些类似的东西我不知道,或者我在某种程度上做错了。
不管第一个问题的答案是什么,如果我想将变量列表绑定到宏中的值列表,我应该怎么做?
编辑:与Eli的answer宏结合使用,现在看起来如下所示:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(syntax-case stx ()
[(_ vars ...)
body]))))