Поскольку вы пытаетесь написать такую функцию, интересно, полезно ли указывать, что + является обычной функцией в Clojure, как и в любом другом Lisp. На самом деле, нет специальных «арифметических выражений» в Clojure, просто функциональных приложений, аргументами которых являются числа и операторы которых выполняют арифметические операции.
Фактически, в большинстве Lisps нет специальных «операторов» в смысле выделенных фрагментов синтаксиса, которые необходимо было бы обернуть, чтобы их функциональность была доступна в виде функции. Clojure необычен как Lisp в этом отношении тем, что он явно зависит от его хост-платформы для некоторых довольно простых функций; например возвышение с плавающей точкой доступно в ванильном Clojure в виде метода pow
класса java.lang.Math
(но см. clojure.contrib.math
для некоторых приятных функций для выполнения различных арифметических операций не в clojure.core
).
Методы Java должны быть завернуты в Clojure, которые будут использоваться в качестве функций (например, переданы в map
и т. Д.), Поэтому они могут использовать операторы на таких языках, как C, Python или сама Java. Тем не менее, они все еще называются с использованием префиксной нотации.
Да, я забыл. – StackedCrooked