Back in 2007 
(https://groups.google.com/forum/#!searchin/clojure/mapc/clojure/x0PDu_D6mP0/3A7CZe-ZDWAJ),
 
Henk Boom raised the possibility of including in Clojure a function with 
syntax like map, but semantics more like Common Lisp's mapc (or Scheme's 
for-each, I believe).  It works just like Clojure map, but applies the 
function to items in a sequence (sequences) only for side-effects.  A 
sequence of results isn't generated, so there's no need for laziness.  
There was discussion, and at one point Rich Hickey seemed to say that he 
had added this kind of function, under the name 'scan'.  It looks like scan 
was subsequently renamed to 'dorun' (http://clojure.org/old_news), but 
dorun doesn't do what mapc does.  As far as I can tell, there is no such 
function at present in Clojure.  Is that correct?

There are other ways to get the same functionality, and it's easy to define 
a simple version of mapc (or whatever it should be called).  However, I 
like the map syntax, even for side-effects, and don't want to reinvent the 
wheel.  Even for small sequences, in which producing a sequence as output 
isn't costly, using mapc tells readers of your code that you're iterating 
over the list solely for side-effects.

(defn mapc [f coll] (doseq [x coll] (f x)))

For example, creating a mutable vector using core.matrix:

=> (def a (zero-vector :ndarray 5))
#'popco.core.popco/a
=> a
#<NDArray [0.0 0.0 0.0 0.0 0.0]>
=> (mapc #(mset! a % -1) [0 2 4])
nil
=> a
#<NDArray [-1 0.0 -1 0.0 -1]>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to