On Mon, Oct 13, 2008 at 11:02 AM, Stephen C. Gilardi <[EMAIL PROTECTED]> wrote:
>
> I've enclosed a modified definition of update-in that allows the
> update function "f" to take arguments in addition to "old" value being
> updated. The new definition does everything the old definition does
> (when additional arguments are not supplied), but it allows "f" to be
> an existing function more of the time rather than a new closure that
> packages up additional arguments.
>
> Here's an example:
>
>        user=> (def m {:a {:b 1}})
>        #=(var user/m)
>        user=> (update-in m [:a :b] inc)
>        {:a {:b 2}}
>        user=> (update-in m [:a :b] #(+ % 2)) ; current or new
>        {:a {:b 3}}
>        user=> (update-in m [:a :b] + 2) ; new
>        {:a {:b 3}}
>
> Suggested update-in:
>
> (defn update-in
>   "'Updates' a value in a nested associative structure, where ks is a
>   sequence of keys and f is a function that will take the old value
> and any
>   supplied args and return the new value, and returns a new nested
>   structure.  If any levels do not exist, hash-maps will be created."
>   ([m [k & ks] f & args]
>    (if ks
>      (assoc m k (apply update-in (get m k) ks f args))
>      (assoc m k (apply f (get m k) args)))))
>

Good idea - patch applied (rev 1069) - thanks!

Rich

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

Reply via email to