Okay, you're re-inventing clojure.walk.  Please take a look at that
namespace.

On Oct 28, 11:52 am, "Eric Schulte" <schulte.e...@gmail.com> wrote:
> Without each type specifying where it would like the function applied
> the result will be sort of hacky, but here's my hackey attempt at fmap
> in clojure.
>
> It makes some assumptions (e.g. you would only want to apply f to the
> values rather than the keys of a hash).  Also I'm not sure what the best
> way is to check is a symbol is a function in Clojure.
>
> user> (defn fmap [f arg]
>             (cond
>               (or (fn? arg) (= (class arg) clojure.lang.MultiFn)) (comp f arg)
>               (list? arg) (map (partial fmap f) arg)
>               (vector? arg) (vector (map (partial fmap f) arg))
>               (map? arg) (apply hash-map (mapcat (fn [[k v]] [k (fmap f v)]) 
> arg))
>               true (f arg)))
> #'user/fmap
> user> ((fmap (partial + 1) sqrt) 9)
> 4
> user> (fmap (partial + 1) (list 1 {:a 2 :b 3} 4))
> (2 {:a 3, :b 4} 5)
> user>

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