Macros 在自定义Racket语言中,如何定义递归宏?

Macros 在自定义Racket语言中,如何定义递归宏?,macros,racket,Macros,Racket,我正在尝试用自定义Racket语言创建一个递归宏。 但是,虽然宏可以通过#lang racket正确展开,但如果使用我的新语言实现,宏将失败 例如,下面是一个简单宏f的递归定义,它扩展到最后一个参数: ;;my-lang.rkt #朗格球拍 (提供#%的数据) #%模块开始 定义语法 (对于语法大小写) 语法 引发语法错误 #%应用程序 引用 #%基准面) #lang s-exp“my-lang.rkt” (定义语法(f stx) (语法大小写stx() [(x)#'x] [(xxs…)#'(

我正在尝试用自定义Racket语言创建一个递归宏。 但是,虽然宏可以通过
#lang racket
正确展开,但如果使用我的新语言实现,宏将失败

例如,下面是一个简单宏
f
的递归定义,它扩展到最后一个参数:

;;my-lang.rkt
#朗格球拍
(提供#%的数据)
#%模块开始
定义语法
(对于语法大小写)
语法
引发语法错误
#%应用程序
引用
#%基准面)
#lang s-exp“my-lang.rkt”
(定义语法(f stx)
(语法大小写stx()
[(x)#'x]
[(xxs…)#'(fxs…)
[(引发语法错误'f“错误语法”stx)])
(f 1 2 3);=>f:f中的语法错误:(f 2 3)

为什么
(f 2 3)
没有匹配和扩展?

向提供的标识符添加

#lang racket
(provide #%datum
         #%module-begin
         define-syntax

         (for-syntax syntax-case
                     syntax
                     raise-syntax-error
                     #%app
                     quote
                     quote-syntax
                     ...
                     #%datum))