Mark Engelberg a écrit :
> Let's imagine that you are using map on a collection for which it is
> very computation intensive to generate the rest, but trivial to
> generate the first.
>   

I don't think that's that simple: it depends on what is in the cons. For 
example, if the input seq is the result of mapping a computation 
intensive function (a common source of computation intensive seqs) then 
taking the rest of this seq is cheap because the rest itslef is a 
lazy-seq (as per map definition):

user=> (def b (map #(do (println "mapping" %) %) (range 10)))
#'user/b
user=> (doall (take 3 (map inc b)))
mapping 0
mapping 1
mapping 2
(1 2 3)

When you really want to delay the computation of rest, you can replace 
(rest s) by (drop 1 s) but that holds on s (so does your lazier-map). 
Your lazier-map can be written:

(defn lazier-map
  ([f coll]
   (lazy-seq
    (when-let [s (seq coll)]
      (cons (f (first s)) (lazier-map f (drop 1 s))))))


Hope this helps

Christophe

-- 
Professional: http://cgrand.net/ (fr)
On Clojure: http://clj-me.blogspot.com/ (en)



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to