阅读特定行数

时间:2011-07-04 19:32:40

标签: haskell functional-programming io

我总是使用C ++和Pascal进行编程,并且过于强调。那么,任何人都可以帮我解决这个问题:

考虑我们有以下输入模式:

integer n
n strings
other data

例如:

2
foo
bar
3 4
and so on.

所以,我只需要读取一个列表中的n个字符串,而不需要读取其他数据。如果没有类似的结构,我该怎么办呢?

1 个答案:

答案 0 :(得分:4)

一种可能的方法是

getLines n = sequence $ replicate n getLine

getLine是一个IO操作,它从标准输入读取一行并将其作为字符串返回。它的类型是IO String

replicate n创建n个相同项目的列表。因此replicate n getLinen IO操作的列表,每个操作都返回一个字符串:[IO String]

sequence是一个函数,它获取返回某些内容的操作列表,并将其转换为返回该内容列表的单个操作。因此,如果我们有[IO String],则sequence会将其转换为IO [String]

这正是我们想要的。