【发布时间】:2016-04-19 00:59:01
【问题描述】:
我想编写一个函数来生成一个包含 n×n 网格坐标的元组列表。
例如:
> genGrid 2
[(0,0),(0,1),(1,0),(1,1)]
> genGrid 3
[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
我知道我可以通过执行以下操作来生成对角线:
genDiagonal n = zip [0..] [0..n-1]
我在想有一个相当简单的方法可以做到这一点,也许是我的对角函数的变体,但我现在是空白的。
【问题讨论】:
-
[(x, y) | x <- [0..n-1], y <- [0..n-1]]表示行优先,或[(y, x) ...]表示列优先。 -
另请参阅this question,它会生成所需的确切输出(尽管这是一个不同的问题)。
-
grid d n = sequence $ replicate d [0..n]将生成大小为n的d维网格。这可以部分评估以获得二维网格2dGrid = grid 2。 -
这也几乎是 stackoverflow.com/questions/4119730/cartesian-product 的复制品,它提供了一堆替代解决方案。我最喜欢的是
(,) <$> [0..x] <*> [0..x]
标签: haskell grid-layout