Haskell-创建2d数组

时间:2014-11-14 17:46:31

标签: haskell multidimensional-array

对于Haskell而言,我是一个新手,并且就功能语言而言,我试图提高自己。我正在尝试创建一个函数,该函数将采用多个行和列并生成如下的2D数组,例如:

 arrayMaker :: (Int, Int) -> [[Int]]
  -- use replicate function somehow to create each row?

结果矩阵如下所示(对于5行,3列):

 [[14, 15, 16],
 [13, 12, 11],
 [8, 9, 10],
 [7, 6, 5],
 [2, 3, 4]]

请注意,值从2的最后一行开始。此外,数组应在升序行和降序行之间交替。非常感谢帮助

1 个答案:

答案 0 :(得分:3)

让我们从这个例子开始:

rowMaker1 n k = [ n .. n+k-1 ] : rowMaker1 (n+k) k

rowMaker1创建连续数字组。它创建了一个无限列表,因此我们使用take来限制计算的元素数量:

ghci> take 5 (rowMaker1 1 3)
[ [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15] ]

我们还可以创建降序版本:

rowMaker2 n k = [ n,n-1..n-k+1 ] : rowMaker2 (n-k) k

ghci> take 5 (rowMaker2 16 3)
[[16,15,14],[13,12,11],[10,9,8],[7,6,5],[4,3,2]]

目标是定义arrayMaker,如下所示:

arrayMaker (nrows,ncols) = take nrows (rowMaker start ncols)
  where start = ???
        rowMaker n k = ???

我们只需要一个rowMaker,它将在升序和降序组之间交替。

这有帮助吗?

如果你遇到困难,我在这里发布了一种可能性:http://lpaste.net/114299