Я знаю, что форму ->
можно использовать для передачи результатов одного результата функции другому:
(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 )
) )
Как лучше всего это сделать?