Clojure: Implementierung der Comp-Funktion

4ClojureProblem 58 wird angegeben als:

Schreiben Sie eine Funktion, mit der Sie Funktionszusammensetzungen erstellen können. Die Parameterliste sollte eine variable Anzahl von Funktionen enthalten und beim Erstellen einer Funktion von rechts nach links angewendet werden.

(= [3 2 1] ((__ rest reverse) [1 2 3 4]))

(= 5 ((__ (partial + 3) second) [1 2 3 4]))

(= true ((__ zero? #(mod % 8) +) 3 5 7 9))

(= "HELLO" ((__ #(.toUpperCase %) #(apply str %) take) 5 "hello world"))

Hier__ sollte durch die Lösung ersetzt werden.

In diesem Problem die Funktioncomp sollte nicht eingesetzt werden.

Eine Lösung, die ich gefunden habe, ist:

(fn [& xs]
  (fn [& ys]
    (reduce #(%2 %1)
            (apply (last xs) ys) (rest (reverse xs)))))

Es klappt. Aber ich verstehe nicht wirklich, wie das gehtreduce arbeitet hier. Wie stellt es dar?(apply f_1 (apply f_2 ...(apply f_n-1 (apply f_n args))...)?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage