Clojure multimethod dispatching on functions and values
Posted
by
Josh Glover
on Stack Overflow
See other posts from Stack Overflow
or by Josh Glover
Published on 2013-10-25T15:39:45Z
Indexed on
2013/10/25
15:54 UTC
Read the original article
Hit count: 213
clojure
I have a function that returns the indexes in seq s at which value v exists:
(defn indexes-of [v s]
(map first (filter #(= v (last %)) (zipmap (range) s))))
What I'd like to do is extend this to apply any arbitrary function for the existence test. My idea is to use a multimethod, but I'm not sure exactly how to detect a function. I want to do this:
(defmulti indexes-of ???)
(defmethod indexes-of ??? [v s] ;; v is a function
(map first (filter v (zipmap (range) s))))
(defmethod indexes-of ??? [v s] ;; v is not a function
(indexes-of #(= v %) s))
Is a multimethod the way to go here? If so, how can I accomplish what I'm trying to do?
© Stack Overflow or respective owner