如何访问特定矩阵元素或具有特定索引Haskell

时间:2019-03-03 14:22:39

标签: haskell matrix

我正在尝试访问矩阵的特定元素。例如,获取子列表的第二个元素,然后将其作为单个列表发回。

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

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

3 个答案:

答案 0 :(得分:2)

对于每个子列表,使用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))

答案 1 :(得分:2)

对于每一行,我们可以获得第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个元素。

答案 2 :(得分:2)

由于行是转置矩阵中的列;符合您的示例;就是

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

我也必须修正您的类型。另请注意按比例关闭问题。

> rowMatrix [[1,2,3,4], [5,6,7,8], [9,10,11,12]]  3
[3,7,11]
it :: [Int]