diff options
-rw-r--r-- | src/clj/clojure/core.clj | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 4096a6ff..ef8b40e2 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -2588,10 +2588,18 @@ (cons (first s) (take-nth n (drop n s)))))) (defn interleave - "Returns a lazy seq of the first item in each coll, then the second - etc." - [& colls] - (apply concat (apply map list colls))) + "Returns a lazy seq of the first item in each coll, then the second etc." + ([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)))))))) (defn var-get "Gets the value in the var object" |