chunked-lazy-sequence-batches
Clojure
(defn chunked
"Splits coll into vectors of at most n items; the final chunk may be short."
[n coll]
(when (pos? n)
(let [v (vec coll)]
(mapv #(subvec v % (min (count v) (+ % n))) (range 0 (count v) n)))))
(defn chunked-lazy
"Lazily yields chunks of n items, so infinite sequences are supported."
[n coll]
(when (pos? n)
(lazy-seq
(when-let [s (seq coll)]
(cons (vec (take n s)) (chunked-lazy n (drop n s)))))))