我想使用嵌套调用来映射(函数)来构建一系列映射(数据结构)。这就是我正在做的事情
(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)))
哪个编译好,但不能像我期望的那样工作。我期望对网格的调用会产生一系列地图:
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)
所以我的问题是,我怎样才能得到我想要的序列?而且,为什么我得到了我得到的特定序列?
答案 0 :(得分:5)
您需要致电map
。在你编写的方式中,内部map
没有被调用。您只是返回(range columns)
的结果。
试试这个:
(defn grid [rows columns]
(mapcat (fn [x]
(map (fn [y] (point x y))
(range columns)))
(range rows)))
您也可以拨打point
这样的电话:#(point x %)
。可能比你写的方式更容易阅读。