【发布时间】:2014-10-07 19:27:35
【问题描述】:
我想在地图上使用地图功能。但我无法让它工作。
一个玩具例子:
(map map [+ - *] [1 2 3] [4 5 6] [7 8 9])
我希望得到类似 (12 15 18) 的结果,但我得到的只是一个错误。
谢谢。
【问题讨论】:
标签: clojure functional-programming
我想在地图上使用地图功能。但我无法让它工作。
一个玩具例子:
(map map [+ - *] [1 2 3] [4 5 6] [7 8 9])
我希望得到类似 (12 15 18) 的结果,但我得到的只是一个错误。
谢谢。
【问题讨论】:
标签: clojure functional-programming
如果您想将每个运算符分别映射到列表上,请使用
((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:
(apply map list (map (juxt + - *) [1 2 3] [4 5 6] [7 8 9]))
这将导致:((12 15 18) (-10 -11 -12) (28 80 162))
【讨论】:
作为现有答案的替代方案,您可以将外部 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))
【讨论】: