I frequently use a more general version of this function that reduces
a seq to a map, mapping each element in the seq to a [key value] pair
for the map. I use this in several different libs:

(defn mash
  "Reduce a seq-able to a map. The given fn should return a 2-element tuple
  representing a key and value in the new map."
  [f coll]
  (reduce
    (fn [memo elem]
      (let [[k v] (f elem)]
        (assoc memo k v)))
    {} coll))

Where "mash" comes from map + hash.

(mash (fn [elem] [(+ 1 elem) (+ 2 elem)]) (list 1 2 3))
=> {4 5, 3 4, 2 3}

You could also use into:

(into {} (map (fn [elem] [(+ 1 elem) (+ 2 elem)]) (list 1 2 3)))
=> {4 5, 3 4, 2 3}

- Mark

On Thu, Feb 5, 2009 at 7:33 AM, Rich Hickey <richhic...@gmail.com> wrote:
>
>
>
> On Feb 4, 10:36 pm, Conrad <drc...@gmail.com> wrote:
>> It is useful to build a map from a list of keys and a value generator
>> function. Of Course, such a function is easy to write:
>>
>> (defn genmap [keys fun]
>>   (zipmap keys (map fun keys)))
>>
>> In fact, it seems so useful that it must be in the standard API
>> somewhere, but I can't find it... did I miss it somewhere, or was I
>> right to create my own? Please let me know if I'm reinventing the
>> wheel.
>>
>>
>
> It does seem useful, although the zipmap call is already concise.
>
> I wonder if this is a frequently reinvented wheel.
>
> 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 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to