Clojure: Implementando la función comp.

4ClojureProblema 58 se declara como:

Escribe una función que te permita crear composiciones de funciones. La lista de parámetros debe tomar un número variable de funciones, y crear una función las aplica de derecha a izquierda.

(= [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"))

aquí__ Debe ser reemplazado por la solución.

En este problema la función.comp No debe ser empleado.

Una solución que encontré es:

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

Funciona. Pero realmente no entiendo cómoreduce trabaja aqui Como lo representa(apply f_1 (apply f_2 ...(apply f_n-1 (apply f_n args))...)?

Respuestas a la pregunta(5)

Su respuesta a la pregunta