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