On Tue, Mar 3, 2009 at 10:56 AM, Meikel Brandmeyer <m...@kotka.de> wrote:
>>
>> This means that dorun should almost always show up right next to the
>> form producing the lazy seq, which means doseq is very likely a better
>> choice, as it is more efficient and usually more succinct than dorun
>> combined with a lazy-seq producer.
>
> What is the use case for dorun? It returns nil, so it can itself only
> be called as a side-effect.

This was kind of my point.  In every case I can think of at the
moment, I would prefer doseq over dorun.

>  (let [the-seq (map #(* % 2) (range 100))]
>    (doseq [x the-seq]
>      (println "Just produced:" x)))

So here's an example of where you could use dorun.

  (dorun (map #(println "Just produced: " (* % 2))
              (range 100)))

But I think what you had was at least as clear.  Though there's no
need for 'map' if you're going to use doseq:

  (doseq [x (range 100)]
    (println "Just produced:" (* x 2)))

And no need for doseq if you're using a simple range:

  (dotimes [x 100]
    (println "Just produced:" (* x 2)))

>> 'for' is in rather a different category, since unlike the others it
>> produces a lazy seq rather than forcing anything.  Use 'for' when it's
>> a more convenient way to express the lazy seq you want than the
>> equivalent combination of map, filter, take-while, etc.
>
> I must confess, I almost never used for... Maybe I should
> try to use it more often.

I like 'for' when I need nested behavior:

  (for [x '(a b c), y '(d e f)]
    [x y])

vs.

  (mapcat (fn [x] (map #(vector x %)
                       '(d e f)))
          '(a b c))

Of course it also does handy things with :when, :while, and :let, as
does doseq.

--Chouser

--~--~---------~--~----~------------~-------~--~----~
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