I saben que la forma ->
puede ser utilizado para pasar los resultados de un resultado de la función a otro:datos de tuberías a través de funciones arbitrarias en Clojure
(f1 (f2 (f3 x)))
(-> x f3 f2 f1) ; equivalent to the line above
(tomada desde el excellent Clojure tutorial at ociweb)
Sin embargo esta forma requiere que conozca las funciones que desea usar en el momento del diseño. Me gustaría hacer lo mismo, pero en tiempo de ejecución con una lista de funciones arbitrarias.
He escrito esta función de bucle que lo hace, pero tengo la sensación de que hay una mejor manera:
(defn pipe [initialData, functions]
(loop [
frontFunc (first functions)
restFuncs (rest functions)
data initialData ]
(if frontFunc
(recur (first restFuncs) (rest restFuncs) (frontFunc data))
data)
))
¿Cuál es la mejor manera de hacer esto?
o sin definir las funciones de antemano: (tubería 2 # (+ 2%) # (/% 3) # (* 1,2%)) – jandot
Sí tienes razón, yo' También soy nuevo en Clojure y todavía no me había topado con comp. Pero, ¿y si tengo una lista de funciones, en lugar de argumentos recopilados? ¿Cómo rompo la lista para que comp la acepte? – tenpn
... porque sin ese detalle, no puedo usar funciones de tiempo de ejecución arbitrarias, y en realidad es el mismo problema replanteado. – tenpn