相关疑难解决方法(0)

通过嵌套宏中的省略号捕获可变数量的参数;缺少模式变量错误

考虑两个宏的情况: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)

macros racket

5
推荐指数
2
解决办法
950
查看次数

标签 统计

macros ×1

racket ×1