2016-04-19 43 views
0

我想编写一个函数来生成一个包含n乘n格的坐标的元组列表。在Haskell中生成网格坐标的元组

例如:

> 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] 

我想有一个相当简单的方法来做到这一点,也许一个变种我的对角线功能,但我会空白。

+1

'[(X,Y)| x < - [0..n-1],y < - [0..n-1]]'为行主要,或'[(y,x)...]'为列主要。 – Mephy

+0

也看到[这个问题](http://stackoverflow.com/questions/8029046/),它会生成确切的期望输出(尽管这是一个不同的问题)。 – Mephy

+0

'grid d n = sequence $ replicate d [0..n]'将产生一个尺寸为'n'的'd'维网格。这可以被部分地评估以获得2维网格'2dGrid =网格2'。 –

回答

5

range功能执行此:

Data.Ix> range ((0, 0), (2, 3)) 
[(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3),(2,0),(2,1),(2,2),(2,3)]