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

时间:2013-05-15 17:42:30

标签: clojure

所以我有一个功能列表和一个数据列表:

[fn1 fn2 fn3] [item1 item2 item3]

如何将每个功能应用于相应的数据项:

[(fn1 item1) (fn2 item2) (fn3 item3)]

示例:

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

=> ["3" 10 9]

2 个答案:

答案 0 :(得分:7)

您可以使用map

(map #(%1 %2) [str #(* 2 %) (partial inc)] [3 5 8])
("3" 10 9)

如果您需要回传,可以(apply vector ...)

(apply vector (map #(%1 %2) [str #(* 2 %) (partial inc)] [3 5 8]))
["3" 10 9]

免责声明:我不太了解Clojure,所以可能有更好的方法来做到这一点。

答案 1 :(得分:2)

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

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)