clojure宏:无法解析符号

时间:2019-04-15 08:49:56

标签: clojure

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),但仍然遇到相同的错误。我理解错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于opab无法在带引号的形式内求值。如果要使用'(取消引号)inside a macro,则需要使用反引号而不是~(单引号)。

(defmacro f [exp]
  (let [[a op b] exp]
    `(~op ~a ~b)))