24

Implementing a for loop in clojure seems to be easy, but how can I implement a foreach statement that reads each element in the list(vector) and does something?

like this...

(foreach i list expression)

Thanks in advance!

JayX
  • 1,754
  • 1
  • 18
  • 27
  • 1
    What about [`map`](http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/map): `(map (fn [i] …) list)`? – Gumbo Mar 12 '11 at 22:13

2 Answers2

32

Just replace for with doseq and you're all set. Don't use map, which is just as lazy as for.

amalloy
  • 89,153
  • 8
  • 140
  • 205
0

map is the functional equivalent of foreach, whereas doseq is for imperative programming with side-effects.

map takes a function f and a seqable collection coll and returns the lazily-evaluated result of applying f to each element in the collection.

Example:

(map inc [1 2 3 4])
=> (2 3 4 5)

(map (fn [x] (* x 2)) [1 2 3 4])
=> (2 4 6 8)

(map dec (take 5 (range)))
=> (-1 0 1 2 3)
Petrus Theron
  • 27,855
  • 36
  • 153
  • 287