为什么这个宏不能执行?

我有以下愚蠢的测试:
(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")
那么为什么?     
已邀请:
嗯,我认为你在阅读我在之前的回答中提到的博客文章后试图解决这个问题 - 但是这篇博文正好解释了这个问题。具体来说,您的第一个示例有两个不同的
show
标识符,一个由宏绑定,另一个来自顶层使用(并且是未绑定的)。 OTOH,在第二种情况下,您正在使用用户代码的词汇上下文创建一个
show
。     

要回复问题请先登录注册