gpt4 book ai didi

vector - 如何在 clojure 中的 map 向量上使用 map 函数

转载 作者:行者123 更新时间:2023-12-02 09:38:57 24 4
gpt4 key购买 nike

我有一个函数可以生成方板上的坐标向量。运行此函数的结果的形式为

 [{: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)))

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

最佳答案

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 中尝试了这些操作:

The REPL

关于vector - 如何在 clojure 中的 map 向量上使用 map 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com