Объедините функции one-arg в функцию multi-arg в Clojure


Интересно, есть ли в Clojure идиома для объединения нескольких функций с одним аргументом в новую функцию, принимающую вектор. Новая функция должна применить первую функцию к первому аргументу и так далее.

Я думаю, что это полезно в ряде ситуаций. Например, вы можете преобразовать координаты x, y и z точки с помощью более простых одномерных функций.

Я бы реализовал сам следующим образом, но боюсь, что это уже должно существовать что-то аналогично в стандартном API.

(defn vector-comp [& fns]
  (fn [avect]
    (vec (map #(%1 %2) fns avect))))
2 2

2 ответа:

Другой способ написать это:

(defn vector-comp [& fns]
    #(map apply fns % (repeat nil)))

Я на 99% уверен, что в стандартных библиотеках нет готового решения (juxtподходит ближе всего, что я знаю)