所以我有一个函数列表和一个数据列表:
[fn1 fn2 fn3] [item1 item2 item3]
我该怎么做才能将每个函数应用于其相应的数据项:
[(fn1 item1) (fn2 item2) (fn3 item3)]
例子:
[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)
如果你需要一个矢量回来,你可以(apply vector ...)
(apply vector (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
版本适合可变参数:
user=> (map (fn [f & args] (apply f args)) [+ - *] [1 2 3] [4 5 6] [7 8 9])
(12 -11 162)