2014-10-27 64 views
1

我想要生成一个具有指定维度的列表列表。 此列表的数据类型看起来是这样的:在Haskell中生成给定尺寸的2D列表

data A = X | Y | Z 

所以列表的类型为[一个]。 (A是Show类的一个实例,所以不用担心)。

用户给出了在一定尺寸(可以说宽度= 3和高度= 4),因此将其含量可能看起来像这样:

[[X,Y,Z], 
[Y,Y,X], 
[Y,X,Z], 
[X,Z,Z]] 

如何可以生成宽度 X 高度 '矩阵',这些值目前并不是那么重要。

在此先感谢。

编辑:(出于清楚的原因)

只想知道如何产生的类型的“矩阵” [[A]]与宽度和高度作为用户输入。 So width =内部列表中元素的数量,height =外部列表中列表的数量。

回答

4

要生成的某个元素填充一个3x4的嵌套列表,你可以使用:

data A = X | Y | Z deriving (Show) 
generate width height = replicate height . replicate width 

main = print $ generate 3 4 X 

得到[[X,X,X],[X,X,X],[X,X,X],[X,X,X]]

请注意,如果目标是频繁点更新,嵌套列表并不是C/Java中2D数组的很好替代品。在这些情况下,请使用Data.MapData.Array