Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组上的Haskell打印映射_Haskell_Printing_Map - Fatal编程技术网

数组上的Haskell打印映射

数组上的Haskell打印映射,haskell,printing,map,Haskell,Printing,Map,我正在练习一个问题,在stdin上输入文本,在stdout上输出。 在我读到的第一行中,他们给出一个整数T,然后是T行。对于下面的T行,我有一个函数,它接受一个整数并返回一个我必须打印的整数。所以我的输出应该是T行。 我被困在这一点上: main = do strcases <- getLine map (calculate) [1..(read strcases)] calculate _ = do strp <- getLine print $

我正在练习一个问题,在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
main=do

strcases您可以使用
readLn
,它结合了
getLine
read
,以及
Control.Monad
中的
replicateM\uuuu
来重复
IO
操作(或任何Monad)给定次数:

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
import-Control.Monad
main::IO()
main=do

n您想要
mapM\uu
。这是一元映射函数。顺便说一句,您只需编写
mapM\uuuCalculate[1..read strcases]
:不需要任何括号!而且
print$read strp+1
也可以。但是,在这两种情况下,我都建议不要使用
read
,最好使用
readLn
直接获得正确的类型。(无论是
read
还是
readLn
都有点不安全,它们并不能很好地处理解析失败……但我认为这对应用程序来说并不是一个真正的问题。)此外,由于您放弃了
calculate
的参数,因此您可以使用
replicateM(read strcases)calculate
,而不是
mapM_calculate[1..(读取小写字母)]
,并消除
计算
参数。