繁体   English   中英

getLine x次haskell

[英]getLine x times haskell

基于Hackerrank的问题

我的问题是如何在stdIn上进行getLine t次?

main = do
    t <- getInt
    let x = [divisorsInNumber unsafeGetInt | a <-[1..t] ]
    print x

getInt :: IO Int
getInt = fmap read getLine

unsafeGetInt :: Int
unsafeGetInt = unsafePerformIO getInt

divisorsInNumber n = length $ filter (== True) $ map (isDivisor n) (integralToListOfInts n)

只是复制t次的getLine与操作replicateM

import Control.Monad (replicateM)

getLines :: Int -> IO [String]
getLines t = replicateM t getLine

因此getInts ,即getInt t次,可以表示为:

getInts :: Int -> IO [Int]
getInts = fmap read <$> getLines

重写为使用getInts的完整代码可以是:

import Control.Applicative ((<$>))
import Control.Monad (replicateM)


getLines :: Int -> IO [String]
getLines n = replicateM n getLine

getInts :: Int -> IO [Int]
getInts n = fmap read <$> getLines n

getInt :: IO Int
getInt = fmap read getLine

divisorsInNumber :: Int -> Int
divisorsInNumber n = length $ filter (isDivisor n) (integralToListOfInts n)

main :: IO ()
main = do
    t <- getInt
    nums <- getInts t
    let x = [divisorsInNumber num | num <- nums]
    print x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM