【问题标题】:How to use the map function on a vector of maps in clojure如何在clojure中的地图向量上使用地图函数
【发布时间】:2019-10-26 11:14:57
【问题描述】:

我有一个函数可以在方板上生成坐标向量。运行这个函数的结果是某种形式的东西

 [{:x 1, :y 0} {:x 0, :y 1} {:x 2, y:3} {:x 3, :y 4}]

运行这个函数后,我需要对上面的结果应用另一个函数。由于我将在集合上映射函数,因此我认为使用 map 函数是合适的。因此,我编写了以下方法:

(defn attack [x y] (map (fn [coord] (println (get coord :x))) [{:x 1, :y 0} {:x 0, :y 1}]))

(我也试过上面的例子,用 get-in 代替 get,没有用)

这不是该方法的最终形式,而只是我试图查看运行后是否至少可以看到打印到终端的内容

clojure myscript.clj

但是,它没有任何结果,我是否从 fn 函数返回值似乎并不重要。比如这个

(defn attack [x y] (map (fn [coord] coord) [{:x 1, :y 0} {:x 0, :y 1}]))

也不返回任何内容。有谁知道我如何至少可以访问我的 fn 函数中的向量内的值?

最后,我的向量是否是通过调用另一个函数生成的有关系吗?
例如,

(defn attack [x y] (map (fn [coord] coord) (get-attack-coordinates x y)))

这会是个问题吗?我猜不是,但我认为问一下以防万一是个好主意。 谢谢大家的阅读:)

【问题讨论】:

    标签: vector clojure functional-programming


    【解决方案1】:

    (map f xs) 总是返回一些东西。不做是不可能的。如果您认为不是,那么您的测量方式有问题,而不是您的map 呼叫。包含更多关于程序结构的代码,而不仅仅是这个 sn-p。

    【讨论】:

      【解决方案2】:

      map 在这种情况下会返回

      (map (fn [coord] coord) [{:x 1, :y 0} {:x 0, :y 1}])
      ;; => ({:x 1, :y 0} {:x 0, :y 1})
      

      请注意,在这种情况下:

      (map (fn [coord] (println (get coord :x))) [{:x 1, :y 0} {:x 0, :y 1}])
      

      它会先打印 1 再打印 0 然后返回

      (nil nil)
      

      因为println 返回nil

      此外,如果您想访问xy,您还可以使用destructuring

      (map (fn [{:keys [x y]}] [x y]) [{:x 1, :y 0} {:x 0, :y 1}])
      

      请注意,我在 REPL 中尝试了这些事情:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多