Clojure初学者,尝试使用宏。我正在写下面的宏
(defmacro f [exp]
(let [[a op b] exp]
(list op a b)))
(f (1 + 2))
按预期工作。
但是
我试图将返回的值从(list op a b)
替换为'(op a b)
,在这种情况下,我无法解析符号op
。我认为是由于list
首先评估其参数而引起的错误,因此我尝试使用'(~op a b)
,但仍然遇到相同的错误。我理解错了什么?
答案 0 :(得分:1)
问题在于op
,a
,b
无法在带引号的形式内求值。如果要使用'
(取消引号)inside a macro,则需要使用反引号而不是~
(单引号)。
(defmacro f [exp]
(let [[a op b] exp]
`(~op ~a ~b)))