如何使用嵌套调用`map`来构建数据结构

Gar*_*owe 1 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)))
Run Code Online (Sandbox Code Playgroud)

哪个编译好,但不能像我期望的那样工作.我期望对网格的调用会产生一系列地图:

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})
Run Code Online (Sandbox Code Playgroud)

但实际上我得到的是一系列整数:

user=> (grid 2 2)
(0 1 0 1)
Run Code Online (Sandbox Code Playgroud)

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

Rod*_*ada 5

你需要打电话map.在你写的方式内部map没有被调用.你只是返回结果(range columns).

试试这个:

(defn grid [rows columns]
  (mapcat (fn [x] 
            (map (fn [y] (point x y))
                 (range columns)))
          (range rows)))
Run Code Online (Sandbox Code Playgroud)

你也可以这样打电话point:#(point x %).可能比你写的方式更容易阅读.