你们好吗? 我对Clojure相当陌生,并且遇到了我认为很容易解决的问题,但似乎无法掌握。 我有一种在方形板上生成坐标矢量的方法。运行该功能的结果是
形式 [{: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)))
这会是一个问题吗?我猜不是,但我认为以防万一是个好主意。 谢谢大家阅读:)
答案 0 :(得分:2)
(map f xs)
总是返回某些内容。不可能没有。如果您认为不正确,那是因为您的衡量方式有问题,而不是您的map
通话存在问题。包括有关程序结构的更多代码,而不仅仅是这一片段。
答案 1 :(得分: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
。
此外,如果您想访问x
和y
,还可以使用destructuring:
(map (fn [{:keys [x y]}] [x y]) [{:x 1, :y 0} {:x 0, :y 1}])
请注意,我在REPL中尝试了以下方法: