No, because functions created by partial ones are just “normal” functions. You could use some metadata for it, for example:
(defn partial2 [f & more]
(with-meta (apply partial f more) {:partial true}))
(def partial-plus (partial2 + 1 2))
(meta partial-plus) ;;=> {:partial true}
I didn’t think about the consequences of this approach, though ...
Kotarak has developed a nicer solution that works, but not always. For example, take this:
(partial? (partial + 1)) ;;=> true
(partial? (partial + 1 2)) ;;=> false
It works:
(defn partial? [f]
(let [[fst snd] (-> (class f) (.getName) (string/split #"\$"))]
(= ["clojure.core" "partial"] [fst snd])))
when string / split is a split function from clojure.string (1.3) or clojure.contrib.str-utils2 (1.2).
source
share