得到这样的东西的惯用方式是什么?
(fn [coll] (function body) [1 0 -1 -1 -1 0 0 0 0 1 1 1 1 1 0 1 -1])
-> [1 1 3 2 1 4 3 2 1 5 4 3 2 1 1 1 1]
我只能以这种方式做。
(fn [coll]
(loop [i 0 r []]
(if (< i (count coll))
(let [elem (nth coll i)
cc (loop [j 1]
(if (< (+ i j) (dec (count coll)))
(let [nelem (nth coll (+ i j))]
(if (= elem nelem)
(recur (inc j))
j))
j))]
(recur (inc i) (conj r cc)))
r)))
最佳答案
修改@noisesmith的简洁解决方案以解决我们认为的问题是:
(defn countdown-runs [s]
(->> s
(partition-by identity)
(map count)
(mapcat #(range % 0 -1))))
例如,
(countdown-runs [1 0 -1 -1 -1 0 0 0 0 1 1 1 1 1 0 1 -1])
; (1 1 3 2 1 4 3 2 1 5 4 3 2 1 1 1 1)
关于clojure - 计算集合中元素的连续出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23712800/