List Haskell从文件中的列表中读取矩阵并使用它

List Haskell从文件中的列表中读取矩阵并使用它,list,haskell,matrix,io,List,Haskell,Matrix,Io,我需要从文件中的列表中获取矩阵。例如: file.txt: [1,2,3,4,5,6,7,8,9] 我想以这种形式阅读:[[1,2,3],[4,5,6],[7,8,9] 此外,我需要在另一个函数中操作它,如: func m x y = do{ printMatrix m; return $ m !! x !! y; } 有可能吗?在矩阵中使用嵌套列表是一种相当简单的方法。如果您的输入已经是这种Haskellish形式,您还可以使用函数read来解析输入。例如: type Matri

我需要从文件中的列表中获取矩阵。例如:

file.txt:

[1,2,3,4,5,6,7,8,9]
我想以这种形式阅读:
[[1,2,3],[4,5,6],[7,8,9]

此外,我需要在另一个函数中操作它,如:

func m x y = do{ printMatrix m; 
    return $ m !! x !! y;
}

有可能吗?

在矩阵中使用嵌套列表是一种相当简单的方法。如果您的输入已经是这种Haskellish形式,您还可以使用函数
read
来解析输入。例如:

type Matrix a = [[a]]

readMatrix :: FilePath -> IO (Matrix a)
readMatrix path = f <- getFile path
                  return $ read f

elemAt :: Int -> Int -> Matrix a -> a
elemAt x y m = m !! x !! y

-- and so on
类型矩阵a=[[a]]
readMatrix::FilePath->IO(矩阵a)
readMatrix path=f Int->Matrix a->a
elemAt x y m=m!!x!!Y
--等等
解决方案可以是:

l2m ::(Eq a) ⇒ Int → [a] → [[a]]
l2m rsize as
    | rsize ≡ 0 = []
    | as ≡ [] = []
    | otherwise = [(take rsize as)] ++ l2m rsize (drop rsize as)

aij :: (Eq a) ⇒ Int → Int → [[a]] → a
aij i j as = (as !! (i - 1)) !! (j - 1)
要使用此功能,您必须将您的输入输入到a(等式a)=>[a]。
希望这有助于ε/2

好消息,这确实是可能的!这是一个简单的问题。如果您想了解更多有关如何操作的信息,那么了解需要使用的输入文件的更多详细信息会有所帮助。