List 多列表haskell

List 多列表haskell,list,haskell,List,Haskell,如何在给定的行和列位置找到矩阵中的第n个元素?例如,如果你有 type Matrice a = [[a]] example :: Matrice Int example = [ [3, 5], [2, 1], [0, 4], [6, 8] ] Prelude > example 0 1 5 Prelude > exa

如何在给定的行和列位置找到矩阵中的第n个元素?例如,如果你有

type Matrice a = [[a]]

example :: Matrice Int  
example = [ [3, 5],                
        [2, 1],                
        [0, 4],                
        [6, 8] ] 

Prelude >  example 0 1
      5
Prelude >  example 2 0
      0
Prelude >  example 1 1
      2
我知道如何只使用给定的列表,例如

nth :: Int -> [a] -> Maybe a
nth _ []       = Nothing
nth 1 (x : _)  = Just x
nth n (_ : xs) = nth (n - 1) xs

但我的问题是,如何访问矩阵中的第n个元素,如给定示例所示

Prelude> example
[[3,5],[2,1],[0,4],[6,8]]
Prelude> :t example
example :: Matrice Int
Prelude> example !! 0 !! 1
5

但是列表可能不是适合这种情况的数据结构,因为索引是O(n)。根据您的任务,Data.Vector或Data.Array可能更适合您。另见

只需单独处理每个列表,即可:

Prelude> example
[[3,5],[2,1],[0,4],[6,8]]
Prelude> :t example
example :: Matrice Int
Prelude> example !! 0 !! 1
5

但是列表可能不是适合这种情况的数据结构,因为索引是O(n)。根据您的任务,Data.Vector或Data.Array可能更适合您。另见

可用于按索引访问元素,但要小心,因为如果索引太大,它会引发异常

example !! 2 !! 0
您已经编写了一个函数来访问列表的第n个元素,只需应用两次:

nth :: Int -> Int -> [[a]] -> Maybe a
nth k n matrix = nth' n =<< nth' k matrix
  where
    nth' _ [] = Nothing
    nth' 0 (x: _) = Just x
    nth' n (_ : xs) = nth' (n - 1) xs

可用于按索引访问元素,但要小心,因为如果索引太大,它会引发异常

example !! 2 !! 0
您已经编写了一个函数来访问列表的第n个元素,只需应用两次:

nth :: Int -> Int -> [[a]] -> Maybe a
nth k n matrix = nth' n =<< nth' k matrix
  where
    nth' _ [] = Nothing
    nth' 0 (x: _) = Just x
    nth' n (_ : xs) = nth' (n - 1) xs

但是如何使用给定类型的n来调整函数呢?n::矩阵a->Int->Int->a@Asma但是当你的索引太大并且没有返回的元素时,你会得到什么呢?但是你如何用给定的n类型来调整函数呢?n::矩阵a->Int->Int->a@Asma但是,当你的索引太大,没有元素可返回时,你会得到什么呢?旁注:没有“矩阵”这样的东西-单数是“一个矩阵”,复数是“一些矩阵”,与顶点/顶点、索引/索引、附录/附录等相同。
f ls m n=ls!!Mn
矩阵以ls表示,矩阵中的列表为
m
,指定列表的元素为
n
。。。[[a]]->Int->Int->a。。。如果要在函数中执行错误检查,请执行此操作,但可以使用
运算符。旁注:没有“矩阵”这类东西-单数是“一个矩阵”,复数是“一些矩阵”,与顶点/顶点、索引/索引、附录/附录等相同。
f ls m n=ls!!Mn
矩阵以ls表示,矩阵中的列表为
m
,指定列表的元素为
n
。。。[[a]]->Int->Int->a。。。如果要在函数中执行错误检查,请执行此操作,但可以使用
操作员。