【发布时间】:2017-02-10 15:30:30
【问题描述】:
我正在关注an article,作者定义了以下宏:
(defmacro make-is-integral-multiple-of (n)
(let ((function-name (intern (concatenate
'string
(symbol-name :is-integral-multiple-of- )
(write-to-string n)))))
`(defun ,function-name (x)
(equal 0 (mod x, n)))))
该宏易于阅读和理解,但我想知道:我们何时以及为什么明确需要 intern 函数?
删除它会破坏宏,然后返回错误:
The value "IS-INTEGRAL-MULTIPLE-OF-3"
is not of type
(OR SYMBOL CONS).
这是否意味着每次宏定义新符号时都必须调用intern? intern 在defmacro 语句之外是否有任何用途?欢迎提供见解。
【问题讨论】:
标签: macros common-lisp symbols