我想制作一个帮助宏来编写匹配扩展。我有这样的事情:
(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-scheme 中已经有类似的东西我不知道,或者我在某种程度上做错了。
不管第一个问题的答案如何,如果我想将变量列表绑定到宏内的值列表,我应该怎么做?
编辑:结合 Eli 的答案宏现在看起来像这样:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(syntax-case stx ()
[(_ vars ...)
body]))))