Как применить те же аргументы к списку вызовов функций в clojure? - PullRequest
1 голос
/ 10 февраля 2020

Предположим, я хочу применить параметр p1 и p2 к списку вызовов функций:

(defn some-func []
    (let [p1 a p2 b]
    (f1 p1 p2)
    (f2 p1 p2)
    (f3 p1 p2)
...
))

Какой хороший и краткий способ сделать это?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020

Предполагая, что вам нужны только побочные эффекты, я бы использовал doseq для принудительного вызова; итерации функций, которые вы хотите вызвать. например,

user=> (doseq [f [println println println]] (f 1))
1
1
1
nil
1 голос
/ 10 февраля 2020

Возможно, вы захотите просмотреть Clojure CheatSheet . Функция juxt может делать то, что вы хотите.

Осторожно, однако, juxt несколько неясен и может затруднить чтение вашего кода.

0 голосов
/ 10 февраля 2020

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...