Clojure 如何使用对`map'的嵌套调用构建数据结构`

Clojure 如何使用对`map'的嵌套调用构建数据结构`,clojure,Clojure,我想使用对映射(函数)的嵌套调用来构建映射序列(数据结构)。这就是我要做的 (defn point [x y] {:x-coord x :y-coord y}) (defn grid [rows columns] (mapcat (fn [x] map (fn [y] (point x y)) (range columns)) (range rows))) 它编译得很好,但不像我预期的那样工作。我预计对g

我想使用对映射(函数)的嵌套调用来构建映射序列(数据结构)。这就是我要做的

(defn point [x y]
  {:x-coord x
   :y-coord y})

(defn grid [rows columns]
  (mapcat 
    (fn [x] map
              (fn [y] (point x y))
              (range columns))
    (range rows)))
它编译得很好,但不像我预期的那样工作。我预计对grid的调用将产生一系列映射:

user=>(grid 2 2)
({:x-coord 0, :y-coord 0} {:x-coord 0, :y-coord 1} {:x-coord 1, :y-coord 0} {:x-coord 1, :y-coord 1})
但我实际上得到的是一系列整数:

user=> (grid 2 2)
(0 1 0 1)

所以我的问题是,我怎样才能得到我想要的序列?还有,为什么我得到了我得到的特定序列?

您需要调用
map
。按照您编写内部
映射的方式,不会调用
。您只是返回
(范围列)
的结果

试试这个:

(defn grid [rows columns]
  (mapcat (fn [x] 
            (map (fn [y] (point x y))
                 (range columns)))
          (range rows)))

您也可以这样调用
#(点x%)
。可能比您编写的方式更容易阅读。

您需要调用
map
。按照您编写内部
映射的方式,不会调用
。您只是返回
(范围列)
的结果

试试这个:

(defn grid [rows columns]
  (mapcat (fn [x] 
            (map (fn [y] (point x y))
                 (range columns)))
          (range rows)))

您也可以这样调用
#(点x%)
。可能比你写的方式更容易阅读。

顺便说一句,这是一个使用
的好地方<代码>(对于[x(范围行),y(范围列)](点x y))
作为旁白,这是使用
的好地方<代码>(对于[x(范围行),y(范围列)](点x y))
谢谢,这是第二次不恰当地使用括号让我感到痛苦。我得小心一点。谢谢,这是第二次不恰当地使用括号咬到我了。我得小心一点。