(interleave)
(interleave c1)
(interleave c1 c2)
(interleave c1 c2 & colls)
Returns a lazy seq of the first item in each coll, then the second etc.
Example
Combine two seqs of unequal length
(interleave (repeat "a") [1 2 3])
Create a map using two vectors
(apply
assoc
{}
(interleave [:fruit :color :temp] ["grape" "red" "hot"]))
Source
(defn
interleave
"Returns a lazy seq of the first item in each coll, then the second etc."
([] ())
([c1] (lazy-seq c1))
([c1 c2]
(lazy-seq
(let
[s1 (seq c1) s2 (seq c2)]
(when
(and s1 s2)
(cons
(first s1)
(cons (first s2) (interleave (rest s1) (rest s2))))))))
([c1 c2 & colls]
(lazy-seq
(let
[ss (map seq (conj colls c2 c1))]
(when
(every? identity ss)
(concat (map first ss) (apply interleave (map rest ss))))))))