I used "take 0" as a simple example to illustrate the problem. But in general 
the standard mapcat evaluates terms than are needed. My f function does a web 
call and processes the JSON records produced by this call, so each extra call 
is a significant performance and resource hit. 

On Aug 24, 2011, at 10:57 AM, Steve Miner <stevemi...@gmail.com> wrote:

> I'd be careful about writing my own version of mapcat.  You might save a call 
> or two on the f function, but you'll probably lose in the general.  Try some 
> experiments with larger take numbers.  You might be better off concentrating 
> on your f function.  I've found that trying to special-case degenerate cases 
> (for empty collections, etc.) has actually hurt my performance, presumably 
> because my cleverness got in the way of hotspot optimizations.  
> 
> 
> On Aug 22, 2011, at 10:32 AM, Asim Jalis wrote:
> 
>> user=> (defn f [[x]] (println "computing x:" (inc x)) (vector (inc x)))
>> #'user/f
>> user=> (->> (iterate f [0]) (take 0))
>> ()
>> user=> (->> (iterate f [0]) (apply concat) (take 0))
>> computing x: 1
>> computing x: 2
>> computing x: 3
>> ()
>> user=> (->> (iterate f [0]) (mapcat identity) (take 0))
>> computing x: 1
>> computing x: 2
>> computing x: 3
>> ()
>> 
>> Is there a way to rewrite mapcat (or apply concat) so that they don't
>> evaluate the incoming seq unnecessarily?
>> 
>> -- 
>> 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
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> 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
> 
> -- 
> 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
> Note that posts from new members are moderated - please be patient with your 
> first post.
> 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

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
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