2012-03-21 81 views
1

如何建立一个无限矩阵,其中的数字与列表理解是对角的?如何用列表理解建立对角线矩阵

[[ 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)至下一每一行(换句话说,我怎么遍历附加行)

+0

你尝试过什么?你知道如何做它的数学方面,或者你需要帮助吗?这是功课吗? – dave4420 2012-03-21 15:20:53

+0

而且,为什么它必须使用列表理解? – dave4420 2012-03-21 15:23:15

+0

它是作业的一部分,我已经尝试了一些这种理解,所以想现在如何理解)我认为使用其他的东西可能会更容易) – overwriter 2012-03-21 16:30:12

回答

2

找到一个公式x和y指数,FE:

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