Clojure减少无法将Long转换为IFn

时间:2015-03-15 06:18:31

标签: clojure classcastexception

本周末我决定学习clojure。我坚持使用reduce.I得到

的类强制转换异常
(reduce #((cond (= %1 0) %2 :else %1)) 0 '(1 1 1))

ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn  user/eval2092/fn--2093 (form-init1869535703328200664.clj:1)

我不确定我到底做错了什么。任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:2)

函数文字阅读器宏#( ... )自动为正文中的表达式提供括号,因为它通常是一个简单的函数应用程序。在您的情况下,cond正在扩展为数值1,然后括号将其转换为(1),这不是有效的函数应用程序。

删除内括号:

(reduce #(cond (= %1 0) %2 :else %1) 0 '(1 1 1))