Операторы Clojure (как и любой другой Лисп) являются простыми функциями; Вы можете определить «оператор» как функцию:
(defn ** [x y] (Math/pow x y))
Оператор "+" (и некоторые другие математические операторы) является особым случаем в Clojure, поскольку он встроенный (по крайней мере, для двоичного случая). Вы можете в определенной степени избежать этого, не ссылаясь на clojure.core
(или исключая clojure.core/+
) в своем пространстве имен, но это может быть очень опасно.
Чтобы создать пространство имен, где + переопределяется:
(ns my-ns
(:refer-clojure :exclude [+]))
(defn + [x y] (println x y))
(+ "look" "ma")
Одна хорошая стратегия, вероятно, заключалась бы в том, чтобы сделать ваш + мультиметодом и вызвать функцию + ядра для числовых случаев.