Thanks Ken,
I should have known the (m :key 0) solution as I've used that before :(
Oh well :)
Andreas

On 01/06/2011, at 3:11 PM, Ken Wesson wrote:

> On Wed, Jun 1, 2011 at 1:05 AM, Andreas Kostler
> <andreas.koestler.le...@gmail.com> wrote:
>> Hi all,
>> I find myself using the following pattern quite often:
>>  (assoc m :key (inc (or (:kay m) 0))
>> 
>> To increment or somehow transform a value in a map that I'm not sure it 
>> exists.
>> Is there an idiomatic way of doing this sort of thing in a short and concise 
>> way?
> 
> Well, these also work:
> 
> (assoc m :key (inc (m :key 0)))
> 
> (merge-with + m {:key 1})
> 
> (update-in m [:key] #(if % (inc %) 1))
> 
> The merge-with looks shortest and cleanest of the four to me, but
> that's just my opinion.
> 
> Incidentally, if you forget the brackets around :key in the update-in
> the error message you get is rather less specific than you'd hope:
> 
> => (update-in {:a 1} :key #(do (println %) (inc %)))
> #<CompilerException java.lang.UnsupportedOperationException: nth not
> supported on this type: Keyword (NO_SOURCE_FILE:0)>
> 
> A :pre clause in update-in checking for coll? on the second argument
> could be added to produce an IAE with a more informative message
> instead of this somewhat vague UOE.
> 
> -- 
> Protege: What is this seething mass of parentheses?!
> Master: Your father's Lisp REPL. This is the language of a true
> hacker. Not as clumsy or random as C++; a language for a more
> civilized age.
> 
> -- 
> 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 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

Reply via email to