Syntax 如何在Scheme或Racket中宏扩展语法规则宏?
我有这个宏Syntax 如何在Scheme或Racket中宏扩展语法规则宏?,syntax,macros,scheme,racket,Syntax,Macros,Scheme,Racket,我有这个宏 (定义语法扩展调试) (语法规则() [(#x)(语法->数据(扩展到顶部形式#'x))]) 这在球拍上很好用。我正试图了解(srfi-26)的扩展情况。文件无法加载 我知道球拍是不同的语言,但为什么这不起作用?如何加载文件?我试过这个: 出现错误: _cut.scm:39:0: #%top-interaction: unbound identifier; also, no #%app syntax transformer is bound at: #%top-interac
(定义语法扩展调试)
(语法规则()
[(#x)(语法->数据(扩展到顶部形式#'x))])
这在球拍上很好用。我正试图了解(srfi-26)的扩展情况。文件无法加载
我知道球拍是不同的语言,但为什么这不起作用?如何加载文件?我试过这个:
出现错误:
_cut.scm:39:0: #%top-interaction: unbound identifier;
also, no #%app syntax transformer is bound
at: #%top-interaction
in: (#%top-interaction define-syntax srfi-26-internal-cut (syntax-rules (<> <...>) ((srfi-26-internal-cut (slot-name ...) (proc arg ...)) (lambda (slot-name ...) ((begin proc) arg ...))) ((srfi-26-internal-cut (slot-name ...) (proc arg ...) <...>) (lambda (...
location...:
_cut.scm:39:0
context...:
do-raise-syntax-error
expand-capturing-lifts
temp118_0
temp91_0
compile15
temp85_0
loop
"/home/kuba/projects/jcubic/lips/_r.scm": [running body]
temp37_0
for-loop
run-module-instance!125
perform-require!78
我对球拍不太熟悉。我真正的问题是,我希望在任何方案实现中看到扩展,以便在中调试语法规则。扩展到:
(do((i 1(+i 1)))
(=I6))
(打印(eval`(宏扩展(剪切a b),i)))
(#:srfi-26-internal-cut()()a b)
(#:srfi-26-内部切割(#:x)(#:x)a b)
(#:srfi-26-内部切割(#:x)(#:x a)b)
(#:srfi-26-内部切割(#:x#:x)(#:x a#:x))
(#:lambda(#:x#:x)(#:begin#:x)a#:x))
我想看看适当的扩展应该是什么样子。您是否知道任何其他可以扩展语法规则宏的方案实现(对于宏,有macroexpand
的替代方案)
编辑:
我已经解决了cut宏的问题,但我仍然想知道如何在任何方案实现中使用macroexpand。最好是R7RS兼容