嗨,大家好 我需要從文件列表中得到一個矩陣。 實施例:哈斯克爾閱讀矩陣,並用它
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;
}
這可能嗎?
感謝
嗨,大家好 我需要從文件列表中得到一個矩陣。 實施例:哈斯克爾閱讀矩陣,並用它
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
的解決方案可能是:
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]。 希望這有助於ε/ 2
是,哈斯克爾可以做到這一點! – sclv 2011-05-18 19:54:02
好消息,這的確是可能的!這是一個簡單的問題。如果您想了解更多關於如何* *做到這一點,這將有助於有更詳細的有關輸入文件,你需要使用。 – 2011-05-18 19:59:30