【发布时间】:2016-04-06 21:06:28
【问题描述】:
我发现很难对宏扩展进行推理,并且想知道测试它们的最佳实践是什么。
所以如果我有一个宏,我可以通过macroexpand-1 执行一级宏扩展。
(defmacro incf-twice (n)
`(progn
(incf ,n)
(incf ,n)))
例如
(macroexpand-1 '(incf-twice n))
评估为
(PROGN (INCF N) (INCF N))
把它变成宏的测试似乎很简单。
(equalp (macroexpand-1 '(incf-twice n))
'(progn (incf n) (incf n)))
是否有组织宏测试的既定惯例?另外,是否有一个用于总结 s 表达式之间差异的库?
【问题讨论】:
-
我会测试宏的最终效果,而不是中间扩展。很好的问题,我会期待答案。
标签: unit-testing macros lisp common-lisp