我正在尝试解析一个输入流,其中第一行告诉我有多少行数据。我最终得到了以下代码,它可以工作,但我认为还有更好的方法。有没有?
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/但我不认为发布其余代码会影响这里要做什么的讨论。
最佳答案
使用replicate
和sequence_
。
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/