我下面an article這裏筆者定義了以下宏:`intern`功能的目的是什麼?
(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
必須調用每一個宏應該定義一個新的符號時間?在defmacro
陳述之外是否有任何用途intern
?深刻的見解是值得的。