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)))))))