clojure通过宏列表结果评估抛出错误

时间:2014-11-07 15:10:43

标签: macros clojure

我写了一个简单的clojure程序:

(defmacro lister[n]
  (let
    [x (range n)]
    `(max ~@(x))
  )
)

; (macroexpand (lister 5))
(lister 5)

当我尝试评估(lister 5)clojure退出时出错:

CompilerException java.lang.ClassCastException:clojure.lang.LazySeq无法强制转换为 clojure.lang.IFn,编译:(:30:3)

我做错了什么?当我用它的值 - (范围10)替换x时,宏运行良好。

1 个答案:

答案 0 :(得分:3)

你不需要x周围的pare。

(defmacro lister[n]
  (let [x (range n)]
    `(max ~@x)))

你也可以用这个更简单地写这个:

(defmacro lister[n]
  `(max ~@(range n)))