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:谢谢!自我提示:记住控制单子的内容
。