【问题标题】:Clojure: map mapClojure:地图地图
【发布时间】:2014-10-07 19:27:35
【问题描述】:

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

一个玩具例子:

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

我希望得到类似 (12 15 18) 的结果,但我得到的只是一个错误。

谢谢。

【问题讨论】:

    标签: clojure functional-programming


    【解决方案1】:

    如果您想将每个运算符分别映射到列表上,请使用

    ((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】:

      你可以使用juxt:

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

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

      【讨论】:

        【解决方案3】:

        作为现有答案的替代方案,您可以将外部 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))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-05
          • 2022-01-07
          相关资源
          最近更新 更多