2011/6/1 Andreas Kostler <andreas.koestler.le...@gmail.com>:
> Thanks Ken,
> I should have known the (m :key 0) solution as I've used that before :(
> Oh well :)

=> (:k {} 0)
0

works too

> 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

-- 
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