如何用列表理解构建对角矩阵

时间:2012-03-21 15:14:13

标签: haskell

如何构建一个无限矩阵,其中数字与列表理解对角放在其中?

[[ 1,  2,  4,  7, 11, ...],
 [ 3,  5,  8, 12, 17, ...],
 [ 6,  9, 13, 18, 24, ...], 
 [10, 14, 19, 25, 32, ...],
 ...]

我试过这样做:

firstColumn = take 6 $ map fst $ iterate (\(a,b) -> (a+b,b+1)) (1,2)
matr :: [[Int]]
matr = [take 6 $ map fst $ iterate (\(x,y) -> (x+y, y+1)) (a, i) | a <- firstColumn, let i = 1] 

但是如何将(i + 1)传递给下一行(换句话说,我如何迭代其他行)

1 个答案:

答案 0 :(得分:4)

通过找到x和y指数的公式,f.e。:

[[ 1 + (x + y) * (x + y + 1) `div` 2 + y | x <- [0..]] | y <- [0..]]