我有一个愚蠢的测试:
(define-syntax a
(lambda (stx)
(syntax-case stx ()
[(k e s) #'(let ((show display)) (e s))])))
(a show "something")为什么这个不能工作呢?(在DrRacket中显示的错误是expand: unbound identifier in module in: show。
但是,以下方法可以起作用:
(define-syntax a
(lambda (stx)
(syntax-case stx ()
[(k e s)
(with-syntax ((show (datum->syntax #'k 'show)))
#'(let ((show display)) (e s)))])))
(a show "something")那为什么呢?
发布于 2011-04-10 16:04:07
嗯,我假设您是在阅读了我在earlier answer中提到的blog post之后尝试这样做的--但那篇博客文章确实解释了这个问题。具体地说,您的第一个示例有两个不同的show标识符,一个由宏绑定,另一个来自顶层使用(未绑定)。在第二种情况下,您将使用用户代码的词法上下文创建一个show。
https://stackoverflow.com/questions/5610149
复制相似问题