Re: Does a standard function exist that acts like assoc except it applies fns to vals

2009-11-23 Thread Meikel Brandmeyer

Hi,

Am 22.11.2009 um 22:32 schrieb samppi:


(defn vary [coll  keys-and-fns]
 (let [fn-map (apply arrray-map keys-and-fns)
   keys-and-vals (mapcat #((val %) (get coll (key %))) fn-map)]
   (apply assoc-args coll keys-and-vals)))


As Jon said: update-in.

(- coll
  (update-in [:x] fn-x)
  (update-in [:y] fn-y))

Sincerely
Meikel



smime.p7s
Description: S/MIME cryptographic signature


Does a standard function exist that acts like assoc except it applies fns to vals

2009-11-22 Thread samppi
Does a function that does this:
  (vary coll :x fn-x, :y fn-y)
  ; Equivalent to (assoc coll :x (fn-x (:x coll)), :y (fn-y (:y
coll)))
exist in the core or contrib APIs?

I'm surprised that I can't find any. It's a very natural extension of
assoc. But if there really isn't any, is the code below the best/most-
idiomatic/most-efficient way to implement such a function?

(defn vary [coll  keys-and-fns]
  (let [fn-map (apply arrray-map keys-and-fns)
keys-and-vals (mapcat #((val %) (get coll (key %))) fn-map)]
(apply assoc-args coll keys-and-vals)))

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


Re: Does a standard function exist that acts like assoc except it applies fns to vals

2009-11-22 Thread John Harrop
On Sun, Nov 22, 2009 at 4:32 PM, samppi rbysam...@gmail.com wrote:

 Does a function that does this:
  (vary coll :x fn-x, :y fn-y)
  ; Equivalent to (assoc coll :x (fn-x (:x coll)), :y (fn-y (:y
 coll)))
 exist in the core or contrib APIs?

 I'm surprised that I can't find any. It's a very natural extension of
 assoc.


There's update-in, which is like what you want but for assoc-in, but oddly
no plain update analogously to plain assoc. I'd use update-in.

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

Re: Does a standard function exist that acts like assoc except it applies fns to vals

2009-11-22 Thread samppi
Ah, update-in is exactly what I need. Excellent, thank you.

On Nov 22, 2:38 pm, John Harrop jharrop...@gmail.com wrote:
 On Sun, Nov 22, 2009 at 4:32 PM, samppi rbysam...@gmail.com wrote:
  Does a function that does this:
   (vary coll :x fn-x, :y fn-y)
   ; Equivalent to (assoc coll :x (fn-x (:x coll)), :y (fn-y (:y
  coll)))
  exist in the core or contrib APIs?

  I'm surprised that I can't find any. It's a very natural extension of
  assoc.

 There's update-in, which is like what you want but for assoc-in, but oddly
 no plain update analogously to plain assoc. I'd use update-in.

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