lisp - 逗号不在反引号内
问题描述
我一直在关注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.
。
解决方案
如果您想象它form
被评估为符号test
,那么这是真的:
`(report-result ,form ',form))
==> (report-result test 'test)
因此,'
在扩展中留下了,以便在评估中引用替换的形式。但是,您的“等效”会这样做:
`(report-result ,form form)
==> (report-result test form)
在这里你看到它form
永远不会被替换,所以现在你需要一个命名的变量form
,否则你会得到一个错误。
推荐阅读
- c# - 在变量中存储多行
- node.js - npm WARN saveError EPERM: operation not allowed, rename 'C:\...\package.json.3542172463' -> 'C:\...\package.json'
- java - 比较Java中的时间对象
- marklogic - xdmp:diacritic-less 给出意想不到的结果
- odoo - 如何编写python代码来获取Odoo计算字段中特定时期之间所有销售订单的总和?
- postgresql - 如何在 Pgadmin4 中创建服务器?
- java - 使用 jodconvertor 将 doc 转换为 pdf 时出现连接拒绝错误
- javascript - FullCalendar 不通过 AJAX/JSON 呈现所有事件
- php - MVC:哪个 MVC 层对于这种方法是正确的?
- javascript - 循环遍历数组出错