haskell - Haskell 中更好的数据流读取

标签 haskell stream

我正在尝试解析一个输入流,其中第一行告诉我有多少行数据。我最终得到了以下代码,它可以工作,但我认为还有更好的方法。有没有?

main = do
    numCases <- getLine
    proc $ read numCases

proc :: Integer -> IO ()
proc numCases
     | numCases == 0 = return ()
     | otherwise = do
         str <- getLine
         putStrLn $ findNextPalin str
         proc (numCases - 1)

注意:代码解决了Sphere问题https://www.spoj.pl/problems/PALIN/但我不认为发布其余代码会影响这里要做什么的讨论。

最佳答案

使用replicatesequence_

main, proc :: IO ()

main = do numCases <- getLine
          sequence_ $ replicate (read numCases) proc

proc = do str <- getLine
          putStrLn $ findNextPalin str

sequence_ 获取一系列操作,并按顺序一个接一个地运行它们。 (然后它会丢弃结果;如果您对操作的返回值感兴趣,则可以使用sequence。)

replicate n x 创建一个长度为 n 的列表,每个元素为 x。因此,我们使用它来构建我们想要运行的操作列表。

关于haskell - Haskell 中更好的数据流读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2868401/

相关文章:

haskell - 在 map /forM 中使用 updateWhere

haskell - Data.FixedList源代码中的 `Cons`是什么?

c++ - 输入流到 vector<char> - vector 迭代器不可取消引用

regex - Stream 或 Iterator 生成匹配正则表达式的所有字符串?

haskell - Windows 中控制台输出的着色

javascript - 这个编译为 JavaScript 的 Haskell 程序如何比 JavaScript 本身更快?

python - 嵌入式 Python : Py_Initialize: can't initialize sys standard streams

php - 如何在 PHP 中将守护进程变成流

c - 在没有 LF CR 的情况下处理传入的串行流

haskell - 使用 IO 和状态 monad 进行递归