我希望能够从控制台输入中读取数字,并将其存储到列表中,直到用户键入结束为止,如下所示:
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]
(此处黑体字是用户输入的内容)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句