теоретически возможно сделать то, что Вы хотите путем использования в своих интересах формата файла Портативного исполняемого файла (PE) для получения тип переменных и смещений, но я столкнулся [документация] со стеной, пытающейся сделать это несколько лет назад.Удачи!
Операторы Clojure (как и любой Lisp) являются простыми функциями; вы можете определить «оператор» как функцию:
(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")
Хорошей стратегией, вероятно, было бы сделать ваш + мультиметодом и вызвать функцию ядра + для числовых случаев.
Взгляните на это: http://clojure.org/multimethods
Некоторые функции, такие как +, являются основными и не могут быть переопределены.
Вы можете создать новую функцию и называть ее, например, «. +» Или «! +» , который аналогичен с точки зрения удобочитаемости.
Используя информацию в указанном выше URL-адресе для нескольких методов, вы можете создать функцию, которая сообщает вашему. +, какую реализацию использовать.