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))
谢谢,这是第二次不恰当地使用括号让我感到痛苦。我得小心一点。谢谢,这是第二次不恰当地使用括号咬到我了。我得小心一点。