gpt4 book ai didi

Haskell:getContents 是如何工作的?

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

为什么以下程序不打印我的输入?看来putStr没有接受输入。 getContents如何工作?

main = do 
contents <- getContents
when (length contents < 10) $ putStr contents

但是,此程序逐行打印输入:
main = do 
contents <- getContents
putStr contents

最佳答案

getContents 获取一切。行缓冲使其逐行
getContents从句柄(例如文件或用户输入)获取整个输入,因此您的程序

main = do 
contents <- getContents
putStr contents

读取标准输入的全部内容并打印出来。您逐行看到这一行的唯一原因是它在终端上使用了行缓冲,所以 getContents获取其传入的字符串时的一行。

懒惰的评价

Haskell 使用惰性求值,这意味着它只在需要时计算一些东西——它不需要计算你正在打印的字符串的结尾来打印它的开头,所以它不会打扰,只打印它现在有。这种惰性函数能够在可能的情况下返回部分结果,而不必先计算所有内容。

一次一行

您出现在评论中希望只在像本次 session 一样短时打印行:
don't print this it's long
print this
print this
this is also too long
boo!
boo!

但自从 getContents全部 输入,它不会打印任何东西,除非 总计 长度小于 10。你所追求的是它分别对待每一行,更像
main = do
contents <- getContents
putStrLn . unlines . filter short . lines $ contents

short xs = length xs <= 10

关于Haskell:getContents 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189325/

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