gpt4 book ai didi

haskell - 如何在 Haskell 中从 stdin 读取三个连续整数?

转载 作者:行者123 更新时间:2023-12-02 17:43:00 25 4
gpt4 key购买 nike

我想读取像 12 34 56 这样的输入使用 Haskell 将其分解为三个整数。

对于单个整数,可以使用 myInteger <- readLn 。但对于这种情况,我没有找到任何解决方案,除了首先读取一行,然后用 , 替换所有空格。 ,(使用类似:

spaceToCommas str =
let repl ' ' = ','
repl c = c
in map repl str

),然后调用read '[' ++ str ++ ']'这感觉很hackish。另外,它不允许我声明我想要读取三个 个整数,它将尝试从标准输入读取任意 数量的整数。

必须有更好的方法。

请注意,我想要一个依赖外部包的解决方案。使用例如Parsec 当然很棒,但是这个简单的示例不需要使用成熟的解析器组合器框架,对吗?

最佳答案

如何将字符串转换为:

convert :: Read a => String -> [a]
convert = map read . words

words 将给定的字符串拆分为字符串列表(“单词”),然后我们使用 map 对每个元素执行 read >.

例如使用它:

main = do
line <- getLine
let [a,b,c] = convert line :: [Int] in putStrLn (show (c,a,b))

或者,例如,如果您想阅读前三个元素而不关心其余部分(是的,这显然需要 super 创造力技能):

main = do
line <- getLine
let (a:b:c:_) = convert line :: [Int] in putStrLn (show (c,a,b))

我在这里返回了一个元组,该元组向右旋转一个位置以显示解析已完成。

关于haskell - 如何在 Haskell 中从 stdin 读取三个连续整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com