Given the recent talk about iter and how most of the expressions can
be done easily with sequences and map. I however, have found that map
often makes these difficult to read because the names are up front in
the function and the arguments follow this.
So, I threw together the following macro that allows map of an
anonymous function to be written more in the style of 'let'. If it
isn't obvious, the bindings can be destructuring.
(defmacro let-map
"Evaluates the exprs, each of which should return a sequence. These
are bound to the binding forms for subsequent calls, and the results of
the last expression in body are collected into a sequence."
[bindings & body]
(assert (vector? bindings))
(assert (even? (count bindings)))
(let [pairs (partition 2 bindings)
bs (map first pairs)
exprs (map second pairs)]
`(map (fn [...@bs] ~...@body) ~...@exprs)))
For evaluating to cause side-effects, you can do (dorun (let-map
...)), but I may also write a 'let-seq' that implements this using
recur to avoid the allocation of the sequence.
(let-map [x [31 41 59 26]
y (iterate inc 1)]
(+ x y))
Probably not that interesting in the simple case.
David
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---