Хотя я не рекомендую переопределять основные функции, такие как +, вы можете использовать привязку или позволить для этого, это зависит от того, какое поведение вы хотите:
(let [+ -] (reduce + [1 2 3])) ; -4
(defn my-plus [x] (reduce + x))
(let [+ -] (my-plus [1 2 3])) ;6
(binding [+ -] (my-plus [1 2 3])); -4
Как уже было сказано в комментариях ниже, связывание больше не работает таким образом, начиная с clojure 1.3, поскольку переменная должна быть динамической, а +, - и т. Д. - нет.
Для целей тестирования / насмешек вы можете получить похожее поведение. В этом случае посмотрите на with-redefs (начиная с версии 1.3):
http://clojuredocs.org/clojure_core/clojure.core/with-redefs
Также см .:
Пусть против связывания в Clojure