我想在地图上使用地图功能。但我无法让它发挥作用。
玩具示例:
(map map [+ - *] [1 2 3] [4 5 6] [7 8 9])
我期待一个像(12 15 18)这样的结果,但我得到的只是一个错误。
感谢。
答案 0 :(得分:5)
作为现有答案的替代方法,您可以使用列表推导替换外部map
,这比嵌套的map
恕我直言更可读:
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))
答案 1 :(得分:4)
如果要在列表上单独映射每个运算符,请使用
((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))
答案 2 :(得分:4)
您可以使用juxt
:
(apply map list (map (juxt + - *) [1 2 3] [4 5 6] [7 8 9]))
这将导致:((12 15 18) (-10 -11 -12) (28 80 162))