将函数列表应用于Clojure中相应的数据列表

将函数列表应用于Clojure中相应的数据列表,clojure,Clojure,我有一个函数列表和一个数据列表: [fn1 fn2 fn3] [item1 item2 item3] 如何将每个函数应用于其相应的数据项: [(fn1 item1) (fn2 item2) (fn3 item3)] 例如: [str #(* 2 %) (partial inc)] [3 5 8] => ["3" 10 9] 您可以使用map (map #(%1 %2) [str #(* 2 %) (partial inc)] [3 5 8]) ("3" 10 9) 如果您需要

我有一个函数列表和一个数据列表:

[fn1 fn2 fn3] [item1 item2 item3]
如何将每个函数应用于其相应的数据项:

[(fn1 item1) (fn2 item2) (fn3 item3)]
例如:

[str #(* 2 %) (partial inc)]   [3 5 8]

=> ["3" 10 9]

您可以使用
map

(map #(%1 %2) [str #(* 2 %) (partial inc)] [3 5 8])
("3" 10 9)
如果您需要返回向量,您可以
(应用向量…


免责声明:我对Clojure了解不多,因此可能有更好的方法来实现这一点。

另一种选择,不一定更好:

user=> (for [[f x] (map vector [neg? pos? number?] [1 2 "foo"])]
  #_=>   (f x))
(false true false)
要使
map
版本适合varargs,请执行以下操作:

user=> (map (fn [f & args] (apply f args)) [+ - *] [1 2 3] [4 5 6] [7 8 9])
(12 -11 162)

美好的谢谢似乎
(分部inc)
不起作用,但
(分部+1)
起作用@user1184248我认为
(partial inc)
会起作用,但它与
inc
一样。对于返回向量,稍微短一点:
(mapv(%1%2)[str#(*2%)inc][3 5 8])
user=> (map (fn [f & args] (apply f args)) [+ - *] [1 2 3] [4 5 6] [7 8 9])
(12 -11 162)