Я знаю, что форма ->
может использоваться для передачи результатов одного результата функции другому:
(f1 (f2 (f3 x)))
(-> x f3 f2 f1) ; equivalent to the line above
(взято из отличный Clojure учебник в ociweb)
Однако эта форма требует, чтобы вы знали функции, которые вы хотите использовать во время разработки. Я хотел бы сделать то же самое, но во время выполнения со списком произвольных функций.
Я написал эту функцию цикла, которая делает это, но у меня есть ощущение, что есть лучший способ:
(defn pipe [initialData, functions]
(loop [
frontFunc (first functions)
restFuncs (rest functions)
data initialData ]
(if frontFunc
(recur (first restFuncs) (rest restFuncs) (frontFunc data) )
data )
) )
Какой лучший способ сделать это?