我练习的问题是在stdin上输入文本并希望在stdout上输出。 它们在我读取的第一行给出一个整数T,然后是T行。对于以下T行,我有一个带整数的函数,并返回一个必须打印的整数。所以我的输出应该是T行。 我现在陷入困境:
main = do
strcases <- getLine
map (calculate) [1..(read strcases)]
calculate _ = do
strp <- getLine
print $ addone (read strp)
addone x = x+1
当然这暂不起作用。你能说明如何打印T行输出吗?
答案 0 :(得分:0)
您可以使用readLn
和getLine
结合的read
和replicateM_
的{{1}}来重复Control.Monad
行动(或任何行动) monad)给定次数:
IO
注意,import Control.Monad
main :: IO ()
main = do
n <- readLn
replicateM_ n calculate
calculate :: IO ()
calculate = do
x <- readLn
print $ addone x
addone :: Int -> Int
addone x = x+1
上的下划线后缀表示将丢弃每个已执行操作的返回值。没有下划线后缀的替代函数将返回一个列表,其中包含每个已执行操作的返回值,在这种情况下我们不需要。