Quale sarebbe un modo più idiomatico per partizionare un seq basato su un seq di numeri interi invece di un solo intero?Partizione di un seq di interi
Ecco la mia realizzazione:
(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)))))
Poi (partition-by-seq [2 3 6] (range))
cede ((0 1) (2 3 4) (5 6 7 8 9 10))
.
Mi piace usare 'when-let' qui da (cons x nil) è solo (x), e trovo molto più pulito rispetto alla versione" if ". Perché usare 'nthrest' invece di' drop'? Sembra che la parte interna potrebbe essere '(when-let [n (prime parti)] (cons (prendere n coll) (partition-by-seq (parti rest) (drop n coll))))' – ToBeReplaced
@ToBeReplaced' nthrest' è solo "drop" che scende avidamente, cosa che pensavo fosse appropriata in questo contesto. Ripensandoci, non sono sicuro che sia importante. In effetti, il 'primo' può essere spostato all'interno di 'when-let'. –