gpt4 book ai didi

Haskell IO 递归

转载 作者:行者123 更新时间:2023-12-02 14:08:24 24 4
gpt4 key购买 nike

我有代码:

read :: IO [Line]
read = do
line <- getLine
let count = length line
line2 <- getLine
if (length line2 /= count)
then error "too long or too short"
else read

我想要做的是,根据用户必须的第一行的长度输入 length-1 行,如果其中任何一行的长度不同与原始行一样,将显示错误消息。

现在我的代码只是一个无限循环,因为我不太明白如何再输入 length-1 行。对此的一些指导将不胜感激。

编辑:行的类型为字符串

最佳答案

您可以使用replicateM将某个操作复制一定次数并收集结果。在您的情况下,该操作是抓取一条线,测试其长度,如果无效则出错。因此,您可以使用类似以下内容来完成您的工作:

import Control.Monad (replicateM)

read :: IO [Line]
read = do
line <- getLine
let count = length line
lines <- replicateM (count-1) $ do
line <- getLine
if length line /= count
then fail "too long or too short"
else return line
return $ line : lines

关于Haskell IO 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663628/

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