There is fmap from clojure.contrib.generic.functor, which expects a
function of arity 1, for just the value:

(use 'clojure.contrib.generic.functor)
(require '[clojure.string :as str])

(def my-map {:first "john" :last "smith" :age 25})

(defn my-fn [value]
  (if (string? value)
    (str/upper-case value)
    value))

user=> (fmap my-fn my-map)
{:first "JOHN", :last "SMITH", :age 25}

On Feb 22, 4:23 pm, rob levy <r.p.l...@gmail.com> wrote:
> The usual intuitive options for this are reduce, zipmap, or into.  You can
> also write a lazily recursive solution.  I wonder why there's no function in
> core that lazily re-constructs the map with the results of the function?  It
> seems to have been discussed on the list at least once or twice.  It seems
> like there would have to be two versions of it, one expecting a function
> with an arity of one (for just the value) and another expecting an arity of
> two (key and value).
>
>
>
>
>
>
>
> On Mon, Feb 21, 2011 at 10:08 PM, yair <yair....@gmail.com> wrote:
> > I'm hoping this is a dumb question and I've missed something obvious.
> > I have a map with various key-value pairs and I want to transform some
> > of the values, e.g.
>
> > (def mymap {:first "john" :last "smith" :age 25}) and say I want to
> > change the strings to be upper case.
> > Right now all I can think of doing is using reduce and passing in an
> > empty map and the re-associating each key with the (possibly)
> > transformed value.  Is there something like the map function that
> > takes two parameters, one a function that receives a pair and returns
> > a new pair, and the other a map, and returns a map that's
> > reconstituted from those pairs?
>
> > Thanks
>
> > --
> > 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