10

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

(for [f funs] (f value))

value当然,我需要每个函数作为参数的值在哪里,并且funs是需要作为参数调用的函数的集合value

那么,我的问题是,Clojure 中是否有一个函数可以做到这一点,但也适用于任意数量的参数?还是上面确实是惯用的 Clojure?

4

2 回答 2

20

您正在寻找juxt

并列

接受一组函数并返回一个 fn,它是这些 fns 的并列。返回的 fn 采用可变数量的 args,并返回一个向量,其中包含将每个 fn 应用于 args 的结果(从左到右)。((并列 abc) x) => [(ax) (bx) (cx)]

于 2013-07-26T07:30:10.487 回答
7

来自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)
于 2016-07-23T05:24:05.797 回答