鉴于:
(define-syntax (test stx)
(syntax-case stx ()
[(_ body ...)
(with-syntax ([body0 (process-body #'(body ...))])
#'body0)]))
我应该如何接收助手中的模式和省略号?我什至不确定将 body ... 包裹在 () 内是否正确,但我已经看到它,它是唯一不会崩溃的东西。
process-body 过程以具有额外 () 包装它的语法结束。我可以尝试将其分开,但我只是想知道正确的方法是什么。
process-body 在之前和之后用一些代码包装了主体模式。而且,与定义类似,我希望能够为宏提供多种形式,而不是一个列表中的所有形式。因此,如果给定 (form1) (form2),其中 form2 是省略号,则流程主体应该 (do-something) (form1) (form2) (do-something-else)。
IE,
(define-for-syntax (process-body body-syntax)
(with-syntax ([stx body-syntax])
(syntax/loc body-syntax
(λ (request)
stx))))
当然,当我在线定义模板时,我有这个工作,我想我可以在这里做到这一点,但有时模板变得笨拙,调用助手很好。
非常感谢。
作为尝试 dyoo 的第一个示例的编辑,我提供以下内容:
#lang racket
(define-syntax (test2 stx)
(syntax-case stx ()
[(_ body ...)
(with-syntax ([(body0 ...) (process-body2 #'(body ...))])
#'(begin body0 ...))]))
(define-for-syntax (process-body2 bodies)
(with-syntax ([(body ...) bodies])
(syntax/loc bodies
(λ (request)
body ...))))
(test2 (print "hi"))
λ:语法错误