为什么这个宏不能执行?
我有以下愚蠢的测试:
(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")
那么为什么?
没有找到相关结果
已邀请:
1 个回复
骨乏唯瓜
标识符,一个由宏绑定,另一个来自顶层使用(并且是未绑定的)。 OTOH,在第二种情况下,您正在使用用户代码的词汇上下文创建一个
。