0

n = 2 の場合、結果の行列が次のようになるような n*n 行列を作成しようとしました。

[[(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)where x and y are inのような要素のリストのリストが必要なよう[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 に答える