[CLJ-1124] for-as Created: 10/Dec/12 Updated: 10/Dec/12 |
|
| Status: | Open |
| Project: | Clojure |
| Component/s: | None |
| Affects Version/s: | Release 1.5 |
| Fix Version/s: | None |
| Type: | Enhancement | Priority: | Minor |
| Reporter: | Yongqian Li | Assignee: | Unassigned |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | None | ||
| Description |
|
A common pattern in programming is building up some data structure step by step: In Python: [code] In an imperative for loop this is easy since we have easy access to the "current" data structure being built up. I propose the addition of a function for-as similar to as-> except the value of the last loop iteration is bound to the name. So we can write the above as: [code] An (un-optimized) implementation might be something like: [code] Note: reduce-for does not return a seq, instead it returns the result of the last loop body iteration. |
| Comments |
| Comment by Yongqian Li [ 10/Dec/12 11:31 PM ] |
|
(Fixed formatting) x = {0: 1}
for item in stuff:
x[item] = item * x.get(item - 1, 0)
(last (for-as [x {0 1}]
[item stuff]
(assoc x item (* item (get x (- item 1) 0)))))
(defmacro reduce-for [[res init] for-seq-exprs body-expr] `(reduce #(%2 %1) ~init (for ~for-seq-exprs (fn [~res] ~body-expr)))) (Someone please fix the formatting in above and delete this comment.) |