对于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的最后一行开始。此外,数组应在升序行和降序行之间交替。非常感谢帮助
答案 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