我对使用语法案例的文档感到困惑,但f
可能意味着什么?
(define-syntax (check stx)
(syntax-case stx ()
[(f (x y))
#'(list 'second: f x y)]))
答案 0 :(得分:1)
此代码以相当微妙的方式被破坏。
首先,
(define-syntax (check stx)
(syntax-case stx ()
[(f (x y))
#'(list 'second: f x y)]))
(check (3 4))
产生错误:检查:语法错误:检查
但问题是扩展中出现的'f'的 use 。要看到这一点,请尝试将其取出:
(define-syntax (check stx)
(syntax-case stx ()
[(f (x y))
#'(list 'second: 1234 x y)]))
(check (3 4))
这评估罚款,产生'(第二名:1234 3 4)
那么,为什么第一个失败了呢?问题在于你的第一个例子,
(check (3 4))
扩展为
(list 'second check 3 4)
但问题在于,扩展中的“检查”是“检查”宏的另一种用途,因此必须进一步扩展,并且第二次扩展不具备正确的形状。
要查看此内容,您可以尝试使用宏步进器扩展程序。运行宏步进器,使用下拉菜单选择“标准”宏隐藏,点击“结束 - >”按钮,然后返回一步。
通常的惯例是使用下划线“_”作为“不关心”符号来匹配模式中宏的名称,如下所示:
(define-syntax (check stx)
(syntax-case stx ()
[(_ (x y))
#'(list 'second: 1234 x y)]))
(check (3 4))
出于好奇:这段代码来自哪里?