【发布时间】:2016-03-13 13:25:20
【问题描述】:
我已经完成了一个 Haskell 程序的编写,但是它的 I/O 和 Main 部分出现了问题。我想读取以下格式的输入:
10 3
1 4 8
第一个和第二个数字是Ints,第二行的数字应该做成一个整数列表,[Int]。列表的长度等于第一行的第二个数字。
我有以下代码一次读取一个 Int,但是,它只能让它在输入的第一行工作。
getInt :: IO Int
getInt = do
l <- getLine
return (read l)
我做错了什么?
【问题讨论】:
-
看看
words函数——像map read . words这样的函数应该适合你 -
顺便说一句:我有点惊讶你声称你的函数在
"10 3"上工作 - 我本来希望这会给你一个 no parse 错误 -
我确实收到了一个无解析错误,尽管我认为这是由于第二个输入行和一个与文件结尾相关的错误。
-
不-这是因为您尝试一次读取两个数字-但是您可以使用我谈到的
map read . words-如果您愿意,您也可以进行模式匹配:[x, y] <- map read . words <$> getLine应该可以解决问题这里是第一行 - 您只需numbers <- map read . words <$> getLine即可获得第二行(在列表中)(当然都在do块中!) -
非常有帮助。非常感谢!
标签: haskell functional-programming