Определение моей собственной функции max с переменными аргументами

Я изучаю 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 , и я предполагаю, что это синтаксическая ошибка с моей стороны, но я не могу понять, как ее исправить.

5
задан rtruszk 23 December 2014 в 21:10
поделиться