我希望能够从控制台输入中读取数字,并将其存储到列表中,直到用户键入结束为止,如下所示:
readN = readNumbers []
readNumbers nums = do
n <- readFloatOrString
case n of
<<number>> -> return readNumbers (nums ++ [n])
"end" -> return nums
这可以在不导入库的情况下实现吗?
最佳答案
您不应该读取该值,或者至少不立即读取该值。您可以先检查行是否为"end"
,如果是,则返回数字,否则继续阅读:
import Text.Read(readMaybe)
readNumbers :: IO [Float]
readNumbers = do
n <- getLine
case (n, readMaybe n :: Maybe Float) of
("end", _) -> pure []
(_, Just n) -> (n:) <$> readNumbers
(_, Nothing) -> …
如果未传递有效的浮点数,则
…
是应该处理此情况的部分。因此,我们可以使用以下方式处理列表:
Prelude Text.Read> readNumbers
1
4
end
[1.0,4.0]
(此处的黑体字是用户输入的内容)。
关于haskell - 从用户输入读取浮点数或字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62235331/