On Oct 29, 5:40 am, David Sletten <[email protected]> wrote:
> You could just bind another local variable in the loop form:
> (loop [ps pairs
> ret {}
> ffps (ffirst ps)]
> (cond (empty? ps) ret
> (some-test ffps) (recur (rest ps) (add-to-result ret ffps) (ffirst
> (rest ps)))
> :true (recur (rest ps) (do-sth-else ret ffps) (ffirst (rest ps)))) )
In this case you have to pass one more parameter to each loop
iteration, and since you actually don't need this param, that breaks
loop's semantics.
Though, I haven't thought about it before, so I will give it a try.
> But you probably want to use 'reduce' instead of 'loop' anyway:
> (reduce (fn [ret [key val]] (if (some-test key) (add-to-result ret key)
> (do-sth-else ret key))) {} pairs)
Yeah, in 90-95% I use reduce. But in 5-10% function cannot be written
with it, for example, when it uses true recursion, not tail call, so I
showed only very general case I have in my code frequently.
> BTW, do you really mean to call 'add-to-result' and 'do-sth-else' with a map
> and a key but no value?
Again, just general case. But thank you for caring :)
--
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