Clojure является удивительным, мы все это знаем, но это не главное. Мне интересно, какой идиоматический способ создания и управления функциями более высокого порядка по-Haskell-подобному. В Clojure я могу сделать следующее:
(defn sum [a b] (+ a b))
Но (sum 1)
не возвращает функцию: она вызывает ошибку. Конечно, вы можете сделать что-то вроде этого:
(defn sum
([a] (partial + a))
([a b] (+ a b)))
В этом случае:
user=> (sum 1)
#<core$partial$fn__3678 [email protected]>
user=> ((sum 1) 2)
3
Но это не похоже на правильный путь. Любые идеи?
Я не говорю о реализации функции sum
, я говорю на более высоком уровне абстракции. Существуют ли какие-либо идиоматические шаблоны? Некоторые макросы? Является ли лучший способ определения макроса или существуют альтернативные решения?