如何在Clojure中将值应用于多个函数?

jay*_*ica 7 clojure

基本上,我需要做类似的事情map,但不是将函数应用于集合中的所有元素,而是需要将相同的(一组)值应用于函数集合(此操作是否具有名称?) .这可能看起来像一个简单的问题,但我还没有在Clojure中找到一种惯用的方法.对于我需要仅对每个函数应用一个值的特殊情况,例如,我已经使用过

(for [f funs] (f value))
Run Code Online (Sandbox Code Playgroud)

其中value,当然,该值我需要每个功能采取作为一个参数,并且funs是其需要与被调用的函数集合value作为参数.

我的问题是,在Clojure中有一个函数可以做到这一点,但是对于任意数量的参数也是如此?或者上面确实是惯用的Clojure?

slo*_*oth 14

您正在寻找 juxt

juxt

获取一组函数并返回一个fn,即fn的并置.返回的fn采用可变数量的args,并返回一个向量,其中包含将每个fn应用于args(从左到右)的结果.((juxt abc)x)=> [(ax)(bx)(cx)]


小智 6

来自BRAVE 和 TRUE 的 CLOJURE部分

你可以用 map 做的另一件有趣的事情是向它传递一个函数集合。如果您想对不同的数字集合执行一组计算,则可以使用它,如下所示:

(def sum #(reduce + %))
(def avg #(/ (sum %) (count %)))
(defn stats
  [numbers]
  (map #(% numbers) [sum count avg]))

(stats [3 4 10])
; => (17 3 17/3)

(stats [80 1 44 13 6])
; => (144 5 144/5)
Run Code Online (Sandbox Code Playgroud)