store/[org.clojure/clojure "1.8.0"] clj::clojure.core/lazy-cat

Official Documentation

Add notes
Arities
==================================================
   [& colls]

Docstring
==================================================
  Expands to code which yields a lazy sequence of the concatenation
  of the supplied colls.  Each coll expr is not evaluated until it is
  needed. 

  (lazy-cat xs ys zs) === (concat (lazy-seq xs) (lazy-seq ys) (lazy-seq zs))

Source

(defmacro lazy-cat
  "Expands to code which yields a lazy sequence of the concatenation
  of the supplied colls.  Each coll expr is not evaluated until it is
  needed. 

  (lazy-cat xs ys zs) === (concat (lazy-seq xs) (lazy-seq ys) (lazy-seq zs))"
  {:added "1.0"}
  [& colls]
  `(concat ~@(map #(list `lazy-seq %) colls)))

Example 1

Edit
;; N.B. this example holds onto the head of a lazy seq which should generally be avoided
(def fib-seq
  (lazy-cat [0 1] (map + (rest fib-seq) fib-seq)))

(take 10 fib-seq)

Example 2

Edit
(lazy-cat [1 2 3] [4 5 6])
;; => (1 2 3 4 5 6)

Example 3

Edit
;; When the producer function produces a collection, not an element,
;; lazy-cat is usable.
(defn n-repeat [n] (lazy-cat (repeat n n) (n-repeat (inc n))))
;; => #'user/n-repeat

(take 6 (n-repeat 1))
;; => (1 2 2 3 3 3)

(take 12 (n-repeat 1))
;; => (1 2 2 3 3 3 4 4 4 4 5 5)

Uses on crossclj