gpt4 book ai didi

Haskell:逐行读取文件

转载 作者:行者123 更新时间:2023-12-04 16:26:18 26 4
gpt4 key购买 nike

我最近做了Waterloo CCC我觉得 Haskell 是回答这类问题的完美语言。我还在学习它。不过,我在输入方面有点挣扎。

这是我正在使用的:

import IO
import System.Environment
import System.FilePath



main = do
name <- getProgName
args <- getArgs
input <- readFile $
if not (null args)
then head args
else dropExtension name ++ ".in"
let (k:code:_) = lines input
putStrLn $ decode (read k) code

如您所见,我正在从给定文件路径的命令行或 j1.in 中读取。例如,如果这个程序被称为 j1.hs并编译为 j1 .

我只对文件的前两行感兴趣,所以我使用模式匹配来获取这些行并将它们绑定(bind)到 kcode ,在这个例子中。然后我读了 k作为整数并将其和代码字符串传递给我的 decode我输出的函数。

我想知道 readFile正在将整个文件加载到内存中,这会很糟糕。但后来我开始想,也许是因为 Haskell 很懒,它只会读取前两行,因为这就是它稍后要求的全部内容。我对吗?

另外,如果该代码示例有什么更好或更惯用的地方,请告诉我。

最佳答案

documentation for readFile 说:

The readFile function reads a file and returns the contents of the file as a string. The file is read lazily, on demand, as with getContents.


所以是的,它只会读取文件的前两行(缓冲意味着它可能会在幕后读取更多内容)。但这是 readFile 的属性具体来说,不是所有的 Haskell I/O 函数。
Lazy I/O 对于 I/O 繁重的程序(例如网络服务器)来说是个坏主意,但它对于不做太多 I/O 的简单程序非常有效。

关于Haskell:逐行读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com