我希望能够从控制台输入中读取数字,并将它们存储到列表中,直到用户键入结束,如下所示:
readN = readNumbers []
readNumbers nums = do
n <- readFloatOrString
case n of
<<number>> -> return readNumbers (nums ++ [n])
"end" -> return nums
Run Code Online (Sandbox Code Playgroud)
这在不导入库的情况下可行吗?
您不应该读取该值,或者至少不要立即读取。您可以先检查该行是否为"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) -> …Run Code Online (Sandbox Code Playgroud)
的…是,应该处理的情况下,如果你没有通过有效的浮点数的一部分。
因此,我们可以处理一个列表:
Prelude Text.Read> readNumbers
1
4
end
[1.0,4.0]Run Code Online (Sandbox Code Playgroud)
(这里的粗体部分是用户输入)。
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |