考虑两个宏的情况:outer-macro定义一些实体的一般结构,并inner-macro扩展外部宏的范围。以下代码捕获了我的意图,其中预期的输出是打印语句。本示例对内部宏的模式抛出以下错误:(_ value ...)。
syntax: no pattern variables before ellipsis in template in: ...
Run Code Online (Sandbox Code Playgroud)
我打算以与外部宏value ...的body ...模式相同的方式使用。实际上,“值”列表正是我所需要的(不一定是非常灵活的“省略号模式”)。遗憾的是,这种方式无法正常工作。如何捕获内部宏中可变数量的参数?
#lang racket
(require
racket/stxparam
(for-syntax syntax/parse))
(define-syntax-parameter inner-macro
(lambda (stx)
(raise-syntax-error 'inner-macro "generic error message" stx)))
(define-syntax (outter-macro stx)
(syntax-parse stx
[(_ body:expr ...+)
#'(syntax-parameterize
([inner-macro
(lambda (stx)
(syntax-case stx ()
[(_ value ...)
(printf "values are: ~a~n" (list value ...))]))])
body ...)]))
(outter-macro
(inner-macro 'a 'b 'c))
; expected result
; > "values …Run Code Online (Sandbox Code Playgroud)