在Haskell中生成具有给定维度的2D列表

时间:2014-10-27 19:07:17

标签: haskell dynamically-generated

我正在尝试生成具有指定维度的列表列表。 此列表的数据类型如下所示:

data A = X | Y | Z

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

用户提供某个维度(假设宽度= 3,高度= 4),因此内容可能如下所示:

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

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

提前感谢。

编辑:(为清晰起见)

我只是想知道如何生成一个'矩阵'类型[[A]]的宽度和高度作为用户输入。 所以width =内部列表中元素的数量,height =外部列表中列表的数量。

1 个答案:

答案 0 :(得分: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