Issue
Is there a possibility to check if something is a partial function in Clojure?
It would be best to have something like (partial? (partial + 10))
?
Thanks in advance
Solution
No, because functions created by partial are just "normal" functions. You could however use some metadata for it, like this:
(defn partial2 [f & more]
(with-meta (apply partial f more) {:partial true}))
(def partial-plus (partial2 + 1 2))
(meta partial-plus) ;;=> {:partial true}
Haven't really thought through the consequences of this approach though...
Kotarak came up with a nicer solution that works, but not always. For example take this:
(partial? (partial + 1)) ;;=> true
(partial? (partial + 1 2)) ;;=> false
This works:
(defn partial? [f]
(let [[fst snd] (-> (class f) (.getName) (string/split #"\$"))]
(= ["clojure.core" "partial"] [fst snd])))
with string/split being the split function from clojure.string (1.3) or clojure.contrib.str-utils2 (1.2).
Answered By - Michiel Borkent Answer Checked By - Marilyn (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.