【问题标题】:Haskell reading matrix from a list in file and use itHaskell 从文件列表中读取矩阵并使用它
【发布时间】:2011-08-28 08:30:03
【问题描述】:

我需要从文件列表中获取一个矩阵。示例:

文件.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;
}

有可能吗?

【问题讨论】:

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

标签: list haskell matrix io


【解决方案1】:

解决方案可能是:

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)

要使用此函数,您必须将输入输入到 (Eq a) => [a]。 希望这有助于 ε/2

【讨论】:

    【解决方案2】:

    在矩阵中使用嵌套列表是一种相当幼稚的方式。如果您的输入已经是这种 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2013-11-05
      相关资源
      最近更新 更多