【发布时间】:2016-07-11 18:15:24
【问题描述】:
我想在 Haskell 上有一个 getInt :: IO Int 函数。这将是一个从 stdin 中获取整数的函数,而缓冲区的其余部分保持不变。
我发现的这种类型的库函数,例如readLn :: IO Int,不适用于如下输入:
2
3 4
因为它将占用整行 3 4,而不是占用 3 并留下 4 到下一个 getInt。虽然我知道我可以读取完整的字符串,然后使用words 将其拆分,但我想问一下是否有不消耗缓冲区的方法。
标准库中是否有执行此操作的功能?是否有任何简单/明显的方法来创建我失踪的getInt?
【问题讨论】:
-
您的函数使用
Ints 之间的分隔符是否正常?如果是这样,似乎很简单,可以创建一个调用getChar的循环,直到看到分隔符,然后在生成的String上调用readIO。 -
也许在
getLine实现中将'\n'更改为''或类似的东西(?)hackage.haskell.org/package/base-4.9.0.0/docs/src/… -
这基本上就是我所描述的,是的,但首先我建议跳过标准
getLine实现的所有缓冲感知幻想。 -
哦,太好了,我还没有看到那个评论。我认为它会完美地工作。谢谢,丹尼尔瓦格纳