什麼會是一個更基於seq整數而不是一個整數分割seq的慣用方法?由整數seq分區
這裏是我的實現:
(defn partition-by-seq
"Return a lazy sequence of lists with a variable number of items each
determined by the n in ncoll. Extra values in coll are dropped."
[ncoll coll]
(let [partition-coll (mapcat #(repeat % %) ncoll)]
(->> coll
(map vector partition-coll)
(partition-by first)
(map (partial map last)))))
然後(partition-by-seq [2 3 6] (range))
產生((0 1) (2 3 4) (5 6 7 8 9 10))
。
我喜歡在這裏使用'when-let',因爲(cons x nil)只是(x),並且發現比「if」版本更清潔。爲什麼使用'nthrest'而不是'drop'?看起來內部部分可能是'(when-let [n(first parts)](cons(take n coll)(partition-by-seq(rest parts)(drop n coll))))' – ToBeReplaced 2013-03-05 20:02:41
@ToBeReplaced' nthrest'只是急速下降的'drop',我認爲在這種情況下是合適的。再次想到,我不確定它是否重要。事實上,'第一個'可以在'when-let'中移動。 – 2013-03-05 20:22:32