Parsing 提取Haskell中格式化文本文件中的最大数字

Parsing 提取Haskell中格式化文本文件中的最大数字,parsing,haskell,max,parsec,Parsing,Haskell,Max,Parsec,好吧,我不确定在哈斯克尔是否有一个直截了当的方法,但这是我的困境 假设我有一个包含以下内容的文本文件: map z [1,2,3,4,5,6,7] Z test x [1,2,3] X map y [1,2,3,4,5] Y map q [1...4] Q 我需要做的是找到地图列表中包含的最大值。例如,在上面的示例中,任何贴图的最高值都是7。 它们的格式通常为 map _ [] _ 所以在这个例子中,我只需要找到映射所持有的最大值。有什么直接的方法可以做到这一点吗 谢谢。我的攻击计划是这样的

好吧,我不确定在哈斯克尔是否有一个直截了当的方法,但这是我的困境

假设我有一个包含以下内容的文本文件:

map z [1,2,3,4,5,6,7] Z
test x [1,2,3] X
map y [1,2,3,4,5] Y
map q [1...4] Q
我需要做的是找到地图列表中包含的最大值。例如,在上面的示例中,任何贴图的最高值都是7。 它们的格式通常为

map _ [] _
所以在这个例子中,我只需要找到映射所持有的最大值。有什么直接的方法可以做到这一点吗


谢谢。

我的攻击计划是这样的:

process :: String -> String                                                    
process input = show . maximum $ map (maximum . readMapLine) goodLines         
        where                                                                  
            isGood line = head (words line) == "map"                           
            goodLines = filter isGood (lines input)                            
            readMapLine line = read ((words line) !! 2) :: [Integer]           


main :: IO ()                                                                  
main = do                                                                      
          input <- getContents                                                 
          print $ process input   
坐下来,仔细地为我愿意接受的格式写出语法。 创建一个ADT,该ADT可以存储成功解析该格式后获得的所有信息,并且只能存储这些信息。 编写一个Parsec解析器。如果您已经完成了前面的两个步骤,那么这应该是轻而易举的事,不过您需要了解一下Parsec。 编写一个函数,用于处理步骤2中设计的ADT并提取感兴趣的统计信息。 将步骤3和步骤4的结果垂直放置在一起;通常,这是最乏味和无趣的部分,但它需要完成=
在你陷入困境之前,让我们知道你在列表中的位置,我们可以提供一些更具针对性的建议。

我的攻击计划如下:

process :: String -> String                                                    
process input = show . maximum $ map (maximum . readMapLine) goodLines         
        where                                                                  
            isGood line = head (words line) == "map"                           
            goodLines = filter isGood (lines input)                            
            readMapLine line = read ((words line) !! 2) :: [Integer]           


main :: IO ()                                                                  
main = do                                                                      
          input <- getContents                                                 
          print $ process input   
坐下来,仔细地为我愿意接受的格式写出语法。 创建一个ADT,该ADT可以存储成功解析该格式后获得的所有信息,并且只能存储这些信息。 编写一个Parsec解析器。如果您已经完成了前面的两个步骤,那么这应该是轻而易举的事,不过您需要了解一下Parsec。 编写一个函数,用于处理步骤2中设计的ADT并提取感兴趣的统计信息。 将步骤3和步骤4的结果垂直放置在一起;通常,这是最乏味和无趣的部分,但它需要完成=
在您陷入困境之前,让我们知道您在列表中所处的位置,我们可以提供一些更为明确的建议。

如果您的文件格式有点简单,您可以这样写:

process :: String -> String                                                    
process input = show . maximum $ map (maximum . readMapLine) goodLines         
        where                                                                  
            isGood line = head (words line) == "map"                           
            goodLines = filter isGood (lines input)                            
            readMapLine line = read ((words line) !! 2) :: [Integer]           


main :: IO ()                                                                  
main = do                                                                      
          input <- getContents                                                 
          print $ process input   

我省略了所有的错误检查,我的解决方案无法读取文件[1…4]中的最后一个列表:我想它应该放弃它。但你有这个想法;-

如果您的文件格式比较简单,您可以编写如下内容:

process :: String -> String                                                    
process input = show . maximum $ map (maximum . readMapLine) goodLines         
        where                                                                  
            isGood line = head (words line) == "map"                           
            goodLines = filter isGood (lines input)                            
            readMapLine line = read ((words line) !! 2) :: [Integer]           


main :: IO ()                                                                  
main = do                                                                      
          input <- getContents                                                 
          print $ process input   

我省略了所有的错误检查,我的解决方案无法读取文件[1…4]中的最后一个列表:我想它应该放弃它。但你有这个想法;-

嗯,坦率地说,我对如何开始有点迷茫。我刚开始学习哈斯克尔,所以我对这门学科的知识还不是很快。也许如果你能建议一个合理的起点,将我推向正确的方向,我可以从那里跟进?1学习如何阅读文件。2了解如何标记文件,将字符串解析为整数列表3了解如何查找整数列表的最大值4了解如何打印到标准输出。5应用知识6?老实说,我对如何开始有点迷茫。我刚开始学习哈斯克尔,所以我对这门学科的知识还不是很快。也许如果你能建议一个合理的起点,将我推向正确的方向,我可以从那里跟进?1学习如何阅读文件。2了解如何标记文件,将字符串解析为整数列表3了解如何查找整数列表的最大值4了解如何打印到标准输出。5应用知识6?7.如果profitHe制作了解析器,请参见@dflemstr为自己辩护:他在上面说,坦白说,我对如何开始有点迷茫。。如果这不是真的,他需要告诉我们他陷入困境的真实位置,在那之前我们无法更好地回答这个问题。我想他放弃了编写解析器,希望能有更简单的东西,比如maximum。最后一张地图。阅读2.话。行,当然不能处理[1…2]或[1,2]的情况。他制作了解析器,请参阅@dflemstr为自己辩护:他在上面说,坦白说,我对如何开始有点迷茫。。如果这不是真的,他需要告诉我们他陷入困境的真实位置,在那之前我们无法更好地回答这个问题。我想他放弃了编写解析器,希望能有更简单的东西,比如maximum。最后一张地图。阅读2.话。行,它不处理[1…2]情况,当然也不处理[1,2]。