Предположим, я хочу применить параметр p1 и p2 к списку вызовов функций:
(defn some-func [] (let [p1 a p2 b] (f1 p1 p2) (f2 p1 p2) (f3 p1 p2) ... ))
Какой хороший и краткий способ сделать это?
Предполагая, что вам нужны только побочные эффекты, я бы использовал doseq для принудительного вызова; итерации функций, которые вы хотите вызвать. например,
doseq
user=> (doseq [f [println println println]] (f 1)) 1 1 1 nil
Возможно, вы захотите просмотреть Clojure CheatSheet . Функция juxt может делать то, что вы хотите.
juxt
Осторожно, однако, juxt несколько неясен и может затруднить чтение вашего кода.
Вы можете использовать for или map, оба из которых возвращают clojure.lang.LazySeq. Небольшой рабочий пример:
for
map
clojure.lang.LazySeq
(defn f1 [x y] (+ x y)) (defn f2 [x y] (- x y)) (defn f3 [x y] (* x 1)) ;; Method 1 - for (for [f [f1 f2 f3]] (f 10 5)) ;; => (15 5 50) ;; Method 2 - map (map #(% 10 5) [f1 f2 f3]) ;; => (15 5 50)