Yeah, fmap is perfect and definitely the most elegant for the specific
problem described by the OP.  I had never heard of that one.

On Tue, Feb 22, 2011 at 6:56 PM, Benny Tsai <benny.t...@gmail.com> wrote:

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

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