Haskell 读取指定行计数 我一直都是用C++和Pascal编程的,而且太过专心致志地思考。那么,谁能帮我回答这个问题:

Haskell 读取指定行计数 我一直都是用C++和Pascal编程的,而且太过专心致志地思考。那么,谁能帮我回答这个问题:,haskell,functional-programming,io,Haskell,Functional Programming,Io,假设我们有以下输入模式: integer n n strings other data 例如: 2 foo bar 3 4 and so on. 所以,我只需要在列表中读取n个字符串,而不读取其他数据。如果没有类似的构造,我应该如何做呢?一种可能的方法是 getLines n = sequence $ replicate n getLine getLine是一种IO操作,它从标准输入中读取一行并将其作为字符串返回。其类型为IO字符串 replicate n创建一个相同项目的列表。因此,re

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

integer n
n strings
other data
例如:

2
foo
bar
3 4
and so on.
所以,我只需要在列表中读取n个字符串,而不读取其他数据。如果没有类似的构造,我应该如何做呢?

一种可能的方法是

getLines n = sequence $ replicate n getLine
getLine
是一种IO操作,它从标准输入中读取一行并将其作为字符串返回。其类型为
IO字符串

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

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

这正是我们想要的。

一种可能的方法是

getLines n = sequence $ replicate n getLine
getLine
是一种IO操作,它从标准输入中读取一行并将其作为字符串返回。其类型为
IO字符串

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

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


这正是我们想要的。

你能指定更多吗?你想从命令行还是文件中读取n个字符串?有一个从命令行读取和处理文件@epsilonhalbe的很棒的教程。谢谢你的教程。你能指定更多吗?你想从命令行或文件中读取n个字符串吗?有一个很棒的从命令行读取和处理文件@epsilonhalbe的教程。感谢您的指导。您也可以使用
replicateM
中的
getLines n=replicateM n getLine
+1,我会在递归函数中编写(并拥有)这个函数,
sequence$replicate n…
更好,这是一件值得学习的事情remember@hammar:谢谢!自我提示:记住
control.Monad
的内容。您也可以使用
replicateM
作为
getLines n=replicateM n getLine
+1我本可以在递归函数中编写(并拥有)它,
sequence$replicate n…
更好,这是一件值得注意的事情remember@hammar:谢谢!自我提示:记住
控制单子的内容