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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---