Clojure:地图

时间:2014-08-14 08:08:55

标签: clojure functional-programming

我想在地图上使用地图功能。但我无法让它发挥作用。

玩具示例:

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

我期待一个像(12 15 18)这样的结果,但我得到的只是一个错误。

感谢。

3 个答案:

答案 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))