我写了一个简单的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时,宏运行良好。
答案 0 :(得分:3)
你不需要x周围的pare。
(defmacro lister[n]
(let [x (range n)]
`(max ~@x)))
你也可以用这个更简单地写这个:
(defmacro lister[n]
`(max ~@(range n)))