【问题标题】:Reading specified lines count读取指定行数
【发布时间】:2011-07-04 19:32:40
【问题描述】:

我一直使用 C++ 和 Pascal 进行编程,而且我的想法过于迫切。那么,谁能帮我解决这个问题:

假设我们有以下输入模式:

integer n
n strings
other data

例如:

2
foo
bar
3 4
and so on.

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

【问题讨论】:

标签: haskell functional-programming io


【解决方案1】:

一种可能的方法是

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]

这正是我们想要的。

【讨论】:

  • 你也可以像getLines n = replicateM n getLine一样使用replicateM
  • +1 我会在递归函数中编写(并拥有)这个 - sequence $ replicate n … 要好得多,要记住的事情
  • @hammar:谢谢!提醒自己:记住Contol.Monad的内容。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 2022-11-02
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多