如何使用Haskell读取文件中的N行?

时间:2017-06-13 03:27:09

标签: haskell io

我的表格中有一个文件:

3
1 2
3 4
5 7

第一行是行数

我知道:

getInt :: IO Int
getInt = readLn 

main = do num <- getInt
          print (num)

读取第一行。

接下来,我试过了:

readInts :: IO [Int]
readInts = fmap (map read.words) getLine

读取一行并获得一个列表:[a,b]。

我尝试在递归循环中使用上述内容

loop :: Int -> IO()
loop n = if 1 == n then do num <- readInts 
                           print(num)
        else loop (n-1)

我只获得了第一行:

[5,3]

但是我需要阅读剩余的行,给定N

2 个答案:

答案 0 :(得分:2)

输入文件的格式与编程竞赛中使用的格式非常相似。这是我编程竞赛的标准设置:

import Control.Monad
import Text.Printf

main :: IO ()
main = do
    n <- readLn
    forM_ [1 .. n] $ \i -> do
        printf "Case %d: " (i :: Int)
        solve

solve的示例可能是:

solve :: IO ()
solve = do
    nums <- map read . words <$> getLine
    print (sum nums)

答案 1 :(得分:0)

您是否查看了lines函数?它接受一个字符串并返回与\n分隔的列表相同的字符串。使用此功能,您甚至不必拥有行数。