Как получить доступ к конкретному элементу матрицы или с определенным индексом Haskell - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь получить доступ к конкретному элементу матрицы.Например, чтобы получить каждый второй элемент подсписка и вернуть как один список обратно.

data Matrix a = M [[a]]
rowMatrix :: [[Int]] -> Int -> a

для ex rowMatrix [[1,2,3,4], [5,6,7,8],[9,10,11,12]] 3 ---> [3,7,11]

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Мы можем для каждой строки получить k -й элемент, чтобы мы могли выполнить отображение, например:

romMatrix :: [[a]] -> Int -> [a]
rowMatrix m k = map (!! k) m

Или для типа Matrix:

romMatrix :: Matrix a -> Int -> [a]
rowMatrix (M m) k = map (!! k) m

Итак, здесь мы создаем список элементов, где каждый элемент является k -ым элементом соответствующего подсписка.

0 голосов
/ 03 марта 2019

Поскольку строки являются столбцами в транспонированной матрице;соответствовать вашему примеру;это просто

rowMatrix :: [[a]] -> Int -> [a]
rowMatrix xs m = transpose xs !! (m-1)

Мне тоже пришлось исправить твой тип.Также обратите внимание на проблему off-by-1.

> rowMatrix [[1,2,3,4], [5,6,7,8], [9,10,11,12]]  3
[3,7,11]
it :: [Int]
0 голосов
/ 03 марта 2019

Для каждого подсписка извлеките его n -й элемент с помощью оператора !!:

rowMatrix [] _ = []
rowMatrix (row:others) n = (row !! n) : (rowMatrix others n)

Например:

rowMatrix [[1,2,3], [2,3,4]] 2
[3,4]

Вы также можете сделать это немного безумнее, но также более кратким:

rowMatrix :: [[a]] -> Int -> [a]
rowMatrix listOfLists n = listOfLists >>= ((:[]) . (!! n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...