On Jun 4, 2010, at 14:11 , Heinz N. Gies wrote:

> 
> On Jun 4, 2010, at 14:03 , Joost wrote:
> 
>> On Jun 4, 1:42 pm, "Heinz N. Gies" <he...@licenser.net> wrote:
>>> Sorry I mixed arguments, it should be (update-in {1 2} [] (constantly {2 
>>> 3}))
>> 
>> Yes, that gives {nil {2 3}, 1 2}
>> 
>> You're not giving any key in the key list, so that is the reason
>> there's a nil key now, and {2 3} is just the value that you give it,
>> since that's what ((constantly {2 3}) nil) returns.
>> 
>> Seems correct as far as the documentation of update-in is concerned.


So for how I'd expect it to work:

(defn update-in*
  ([m [k & ks] f & args]
   (if ks
     (assoc m k (apply update-in* (get m k) ks f args))
     (if k
       (assoc m k (apply f (get m k) args))
       (apply f  m args)))))

user> (get-in {1 2} [])
{1 2}
user> (update-in* {1 2} [] assoc  1 3)
{1 3}

In opposite of how it works:

user> (update-in {1 2} [] assoc  1 3)
{nil {1 3}, 1 2}



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