我试图解析一个输入流,其中第一行告诉我有多少行数据.我最终得到以下代码,它可以工作,但我认为还有更好的方法.在那儿?
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)
Run Code Online (Sandbox Code Playgroud)
注意:该代码解决了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
Run Code Online (Sandbox Code Playgroud)
sequence_
获取一系列动作,并按顺序依次运行它们.(然后它会抛弃结果;如果你对动作的返回值感兴趣,你可以使用sequence
.)
replicate n x
制作一个长度列表n
,每个元素都是x
.因此我们使用它来构建我们想要运行的操作列表.