我正在尝试访问矩阵的特定元素。例如,获取子列表的第二个元素,然后将其作为单个列表发回。
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]
答案 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]