This is my attempt to take Meikel's code and extend it to accept arbitrarily
many collections as 'mapcat' does:
(defn lazy-mapcat [f & colls]
(lazy-seq
(when (every? seq colls)
(concat (apply f (map first colls))
(apply lazy-mapcat f (map rest colls))))))
user=> (->> (iterate f [0]) (lazy-mapcat identity) (take 1))
(0)
user=> (defn g [x y]
(println "computing x + y:" (+ x y))
[(+ x y)])
#'user/g
user=> (take 1 (mapcat g (range) (range)))
computing x + y: 0
computing x + y: 2
computing x + y: 4
computing x + y: 6
(0)
user=> (take 1 (lazy-mapcat g (range) (range)))
(computing x + y: 0
0)
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en