0

我试图制作一个 n*n 矩阵,如果 n = 2,则结果矩阵将是:

[[(1, 1), (1, 2)], [(2, 1), (2, 2)]]

即 2*2 矩阵中的可用位置矩阵。

我尝试了以下方法:

myIndex :: Int -> [[(Int, Int)]]
myIndex (n+1) n  =  []
myIndex 1     n  =  [zip [1, 1..] [1, 2..n]] ++ myIndex 2 n 

但有些不对劲。究竟是什么问题?

为清楚起见,考虑另一个 n = 3 的示例:

[[(1, 1), (1, 2), (1, 3)], [(2, 1), (2, 2), (2, 3)], [(3, 1), (3, 2), (3, 3)]] 

提前致谢。

4

1 回答 1

3

您似乎想要一个元素列表的列表,例如(x, y)x 和 y 所在的位置[1..n]。我们就这么写吧:

myIndex n = map (\x -> map (\y -> (x, y)) [1..n]) [1..n]

另一种说法是列表推导:

myIndex n = [ [(x, y) | y <- [1..n]] | x <- [1..n] ]
于 2013-03-20T10:36:09.703 回答