1

map (関数) へのネストされた呼び出しを使用して、一連のマップ (データ構造) を構築したいと考えています。これが私がやっていることです

(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})

しかし、実際に得たのは int のシーケンスでした:

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

私の質問は、どうすれば必要なシーケンスを取得できますか? そして、なぜ特定のシーケンスを取得したのですか?

4

1 に答える 1

5

に電話する必要がありますmap。あなたが書いた方法では、インナーmapは呼び出されていません。の結果を返すだけです(range columns)

これを試して:

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

pointlike that:を呼び出すこともできます#(point x %)。あなたが書いた方法よりも読みやすいかもしれません。

于 2013-05-13T21:01:46.057 に答える