考慮兩個宏的情況:outer-macro
定義了某個實體的一般結構,並且inner-macro
擴展了外部宏的範圍。我的意圖被捕獲在下面的代碼中,其中預期的輸出是一個打印語句。此示例將引發內部宏的模式的以下錯誤:(_ value ...)
。通過嵌套宏中的省略號捕獲可變數目的參數;丟失模式變量錯誤
syntax: no pattern variables before ellipsis in template in: ...
我打算用在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 are: (a b c)"
這確實是一個很好的方法來做到這一點,儘管我還沒有確定*最好的方式。謝謝! – Sam