gpt4 book ai didi

haskell - 解析命令行参数

转载 作者:行者123 更新时间:2023-12-02 21:18:38 25 4
gpt4 key购买 nike

我尝试在 haskell 中解析命令行参数。

下面是示例代码:

import System.Environment

work :: [Integer] -> Int
work (s:r:t:es) = length es

main :: IO ()
main = getArgs >>= putStrLn . show . work . (map read)

我执行它:

./test 2 10 10 [7, 3, 5, 4, 4]

输出与预期一样为 5。但是,如果我用 sum 替换 length,用 Integer 替换 Int,则执行会引发错误

test: Prelude.read: no parse

有人可以解释一下如何做到这一点吗?

最佳答案

getArgs 返回的列表看起来像这样:["2", "10", "10", "[7,", "3,", "5,", "4,", "4]"] 。这些字符串中的前三个是整数的有效字符串表示形式,但其他字符串则不是。所以当你使用read时对于这些,你会得到一个错误。

计算长度时没有看到错误的原因是 length不必查看列表中的值,因此 read s 永远不会被评估。

但是,为了对这些值进行求和,确实需要对它们进行评估。这就是为什么你会得到异常。

为了解决您的问题,您可以仅更改参数的格式以不包含括号和逗号,或者在将参数传递给 read 之前手动检查参数并删除括号和逗号。 .

另一种选择是将后面的参数连接在一起,用空格分隔(因此最终得到“[7, 3, 5, 4, 4]”),然后将其作为单个字符串传递给 read类型 [Integer] .

关于haskell - 解析命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571368/

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