首页 > 解决方案 > 逗号不在反引号内

问题描述

我一直在关注http://www.gigamonkeys.com/book/。在本章http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html中,有一个名为的宏check,其定义如下。

(defmacro check (form)
  `(report-result ,form ',form))

根据我对宏的理解,我虽然上面的代码相当于下面的代码

(defmacro check (form)
  `(report-result ,form form))

但它抛出Comma not inside a backquote.

标签: lispcommon-lisp

解决方案


如果您想象它form被评估为符号test,那么这是真的:

`(report-result ,form ',form))
==> (report-result test 'test)

因此,'在扩展中留下了,以便在评估中引用替换的形式。但是,您的“等效”会这样做:

`(report-result ,form form)
==> (report-result test form)

在这里你看到它form永远不会被替换,所以现在你需要一个命名的变量form,否则你会得到一个错误。


推荐阅读