2013-03-20 2 views
0

Я пытался сделать п * п матрицы таким образом, что , если п = 2 результирующая матрица будет:Создание квадратных матрицы позиций в Haskell

[[(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 

Но что-то не так. Что именно не так?

Для наглядности рассмотрим еще один пример с п = 3:

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

спасибо заранее.

+0

именно то, что «неправильно»? Для начала, 'myIndex (n + 1) n' является недопустимым синтаксисом. И все это лучше сделать с помощью «карты» в любом случае ... – Koterpillar

+0

@ Koterpillar вы знаете, как я могу это сделать? Я попытался сделать это через 2-3 часа, но я не мог понять это –

+0

'matrix n = map (\ i -> map (i,) [1..n]) [1..n]' – leventov

ответ

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] ] 
Смежные вопросы