Clojure:地图

Clojure:地图,clojure,functional-programming,Clojure,Functional Programming,我想在地图上使用地图功能。但我不能让它工作 玩具示例: (map map [+ - *] [1 2 3] [4 5 6] [7 8 9]) 我期望得到(121518)这样的结果,但我得到的只是一个错误 谢谢。如果要在列表上分别映射每个运算符,请使用 ((fn [ops & args] (map #(apply map %1 args) ops)) [+ - *] [1 2 3] [4 5 6] [7 8 9]) 或者如果你愿意重新排列论点 (map #(map %1 [1 2 3]

我想在地图上使用地图功能。但我不能让它工作

玩具示例:

(map map [+ - *] [1 2 3] [4 5 6] [7 8 9])
我期望得到(121518)这样的结果,但我得到的只是一个错误


谢谢。

如果要在列表上分别映射每个运算符,请使用

((fn [ops & args] (map #(apply map %1 args) ops)) [+ - *] [1 2 3] [4 5 6] [7 8 9])
或者如果你愿意重新排列论点

(map #(map %1 [1 2 3] [4 5 6] [7 8 9]) [+ - *])

两者都给出了
((12 15 18)(-10-11-12)(28 80 162))的结果。
您可以使用
juxt

(应用地图列表(地图(juxt+-*)[1 2 3][4 5 6][7 8 9])


这将导致:
((12 15 18)(-10-11-12)(28 80 162))

作为现有答案的替代方案,您可以使用列表理解替换外部的
地图,该地图比嵌套的
地图更可读:

user=> (defn fun [ops & args]
  #_=>     (for [op ops]
  #_=>         (apply map op args)))
#'user/fun

user=> (fun [+ - *] [1 2 3] [4 5 6] [7 8 9])
((12 15 18) (-10 -11 -12) (28 80 162))