【发布时间】:2014-03-20 23:40:54
【问题描述】:
我正在尝试将文件名放入我的程序中,然后将文件逐行读取到字符串列表中。我希望在进入程序的其余部分之前读取整个文件。我要阅读的文件也大约有 10K 行。我还需要检查每一行的长度,以便能够将它们放入不同的列表中。我目前有:
stageone :: String->[[String]]
stageone xs = do
fileLines <-readFile.xs
let line = lines fileLines
xss -- dont know where to go from here
【问题讨论】:
-
在继续之前需要阅读所有文件的原因是什么?这是教授的要求吗?你关心性能吗?特别是因为你有一个 10K 的文件,我认为这就是 Haskell 惰性 IO 的好处。
-
我在工作时需要搜索整个文件,所以我想先阅读整个文件。
-
但是 8,002 元素的存在会影响您找到第三个元素吗?
findElement xs = filter (\x -> x > 5 && isOdd x) xs该列表可能是无限的,但filter可以立即开始返回结果。 -
好吧,我的计划是最终将每个字符串长度分解为自己的列表,这样当我需要搜索时,我可以获取搜索键长度,然后只搜索包含长度元素的列表。因此,如果我的键长度为 5,我将只搜索具有长度为 5 的元素的列表。
-
这可能不会以最适合 Haskell 的方法结束。我很难根据我所知道的来判断。它可以很容易地将您的搜索应用于长度过滤器的结果。也可能更有效率。懒惰做有趣的事情。从 C 或 Java 中摆脱直接的严格评估思维是学习 Haskell 中最困难的部分之一。
标签: haskell readfile nested-lists