Я изучаю Clojure, решая проблемы, перечисленные в 4clojure .Одним из упражнений является создание собственной функции max
с переменными аргументами.
Я пытаюсь решить эту простую проблему с помощью REPL, и я нашел следующее решение:
(defn my-max
[first & more] (calc-max first more))
(defn calc-max
[m x]
(cond (empty? x) m
(> (first x) m) (calc-max (first x) (rest x))
:else calc-max m (rest x)))
Что отлично работает, но упражнение не позволяет использовать def
, и поэтому я должен объединить обе функции в одну.Когда я заменяю ссылку calc-max
ее кодом, результат будет:
(defn my-max
[first & more]
((fn calc-max
[m x]
(cond (empty? x) m
(> (first x) m) (calc-max (first x) (rest x))
:else calc-max m (rest x)))
first more))
Но этот код не работает и возвращает следующую ошибку:
user=> (my-max 12 3 4 5 612 3)
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0)
Я предполагаю эту ошибкуисходит из попытки оценить результат функции calc-max
, и я предполагаю, что это синтаксическая ошибка с моей стороны, но я не могу понять, как ее решить.