基本上,我需要做类似map
的操作,但是我不需要将函数应用于集合中的所有元素,而是需要将相同的(一组)值应用于函数集合(这个操作有名字吗?)。这可能看起来像一个简单的问题,但我还没有在Clojure中找到一种惯用的方法。对于我需要仅为每个函数应用一个值的特殊情况,例如,我使用了
(for [f funs] (f value))
其中value
当然是我需要每个函数作为参数的值,而funs
是需要使用value
调用的函数集合论点。
我的问题是,Clojure中是否有一个函数可以执行此操作,但是也可以针对任意数量的参数进行推广?或者上面确实是惯用的Clojure?
答案 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)