2011-05-18 60 views
3

嗨,大家好 我需要從文件列表中得到一個矩陣。 實施例:哈斯克爾閱讀矩陣,並用它

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; 
} 

這可能嗎?

感謝

+5

是,哈斯克爾可以做到這一點! – sclv 2011-05-18 19:54:02

+0

好消息,這的確是可能的!這是一個簡單的問題。如果您想了解更多關於如何* *做到這一點,這將有助於有更詳細的有關輸入文件,你需要使用。 – 2011-05-18 19:59:30

回答

5

有使用嵌套列出你的矩陣的比較幼稚的方式。如果輸入已經在這個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 
2

的解決方案可能是:

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