在Guile方案中,我有一个调用另一个宏的宏,并且我希望对内部宏的调用引用内部宏中使用的符号。这里有一个简单的例子来说明我正在尝试获得的东西:
(define-syntax macro1
(lambda (x)
(syntax-case x ()
((macro1 expr1)
(with-syntax ((f (datum->syntax x 'f)))
#'(lambda (f) expr1))))))
(define-syntax macro2 (lambda (x)
(syntax-case x ()
((macro2 expr2)
#'(macro1 (expr2 f))))))
((macro2 1+) 2)我期望最后一行返回3,但是我得到了以下错误:
;;; <stdin>:142:0: warning: possibly unbound variable `f'
ice-9/boot-9.scm:1669:16: In procedure raise-exception:
Unbound variable: f可以做我想做的事吗?
发布于 2020-08-01 12:22:04
好了,我发现了如何做到这一点。我必须在datum->syntax调用中使用#‘宏1而不是x:
(define-syntax macro1
(lambda (x)
(syntax-case x ()
((macro1 expr1)
(with-syntax ((f (datum->syntax #'macro1 'f)))
#'(lambda (f) expr1))))))
(define-syntax macro2 (lambda (x)
(syntax-case x ()
((macro2 expr2)
#'(macro1 (expr2 f))))))我不确定为什么它不适用于x,并且我在手册中找不到任何解释。
https://stackoverflow.com/questions/63198107
复制相似问题