【发布时间】:2015-02-21 18:08:34
【问题描述】:
我正在学习 Clojure 和函数式编程,为了练习,我正在研究 4clojure 问题。
这个功能,(不是最好的方法..我知道)正在工作。 (反向交错)但是,该功能正在重新调整零。
(defn reverse_interleave
[coll ss]
(let [xx (dec ss)]
(loop [coll (reverse coll) s xx _ss ss ret `()]
(if (nil? (first coll)) (do (println :ret ret) ret))
(when-let [x (first coll)]
(recur
(rest coll)
(if (zero? s) xx (dec s))
(if (or (= 1 _ss) (zero? _ss)) 0 (dec _ss))
(if (zero? _ss)
(map-indexed #(if (= % s) (cons x %2) %2) ret)
(cons (list x) ret))
))
)) ret)
(reverse_interleave (range 9) 3)
问题是……为什么?
【问题讨论】:
-
您在循环中定义了一个变量
ret,但它不会存在于循环之外。函数中的最后一个ret在循环之外,所以它不是同一个变量。当你评估你的代码时,你甚至会得到一个关于它的 CompilerException。 -
klebervirgilio,你能稍微改进一下你的问题标题——只是标题吗?
标签: clojure