【发布时间】:2014-09-11 18:37:11
【问题描述】:
我是 clojure 的新手,我一直在尝试不同的程序。这是我的程序:
(defn sdsu-reverse [x]
(loop [n (count x) x x]
(if (= 0 n)
(x)
(recur (- n 1) (conj (next x) (first x))))))
(= (sdsu-reverse [1 2 3 4 5]) [5 4 3 2 1])
我收到错误:java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IFn C:\Users\Shalima\Documents\Textbooks\Functional Programming\Programs\sample.clj:44 user/sdsu-reverse
但我似乎无法弄清楚。你能帮我解决这个问题吗?
谢谢。
【问题讨论】:
-
(x)尝试将x(这是一个序列)作为函数调用。您只需要x。 -
另外(因为你正在学习)你不需要每次都计算你的序列。您只想检查它是否为空。
-
@DiegoBasch 确实,您只想检查它是否为空,但请注意,原始代码只计算一次,而不是每次。
-
正确,我以为我在比较中看到了计数。 OP 的代码(至少现在是这样)在循环开始时计算在内。但它确实保留了一个不必要的计数器。
标签: clojure