Ich lerne Clojure, um die Probleme zu lösen, die auf 4clojure . Eine der Übungen ist die Erstellung eines eigenen max
Funktion mit variablen Argumenten.
Ich versuche, dieses einfache Problem mit der REPL zu lösen und bin zu dieser Lösung gekommen:
(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)))
Das funktioniert gut, aber die Übung erlaubt nicht die Verwendung von def
und deshalb muss ich beide Funktionen in einer einzigen zusammenfassen. Wenn ich die calc-max
Referenz mit seinem Code ist das Ergebnis:
(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))
Aber dieser Code funktioniert nicht und gibt den nächsten Fehler zurück:
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)
Ich vermute, dieser Fehler kommt von dem Versuch, das Ergebnis der calc-max
Funktion und ich vermute, dass es sich um einen Syntaxfehler meinerseits handelt, aber ich kann nicht herausfinden, wie ich ihn beheben kann.