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

时间:2013-07-26 07:25:54

标签: clojure

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

(for [f funs] (f value))

其中value当然是我需要每个函数作为参数的值,而funs是需要使用value调用的函数集合论点。

我的问题是,Clojure中是否有一个函数可以执行此操作,但是也可以针对任意数量的参数进行推广?或者上面确实是惯用的Clojure?

2 个答案:

答案 0 :(得分:12)

您正在寻找juxt

  

juxt

     

获取一组函数并返回一个并置的fn   那些fns。返回的fn采用可变数量的args,和   返回一个向量,包含将每个fn应用于的结果   args(从左到右)。   ((juxt a b c)x)=> [(a x)(b x)(c x)]

答案 1 :(得分:3)

从CLOJURE的a section获得BRAVE和TRUE

  

你可以用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)