gpt4 book ai didi

haskell - Haskell 中的命令行参数为 Int

转载 作者:行者123 更新时间:2023-12-02 01:59:23 26 4
gpt4 key购买 nike

我有一个 Haskell 程序,它从命令行接受 2 或 3 个 Int:

-- test.hs

main :: IO ()
main = do
args <- fmap (read . head) getArgs
case args of
[x,y,a] -> doGeneration x y a
[x,y] -> doGeneration x y 10
_ -> usage

但是,当我使用参数运行它时:

$ ./test 100 200
divide: Prelude.read: no parse

为什么?

最佳答案

getArgs :: IO [String] 返回 String 的列表s,通过头部然后 args然后它将 read该项目。

但是,您从未指定它应该读取的内容,因为您使用 argscase … of …条款 [x,y,a][x, y] ,它会尝试将其读取为数字列表(数字的类型由 doGeneration 签名指定。这意味着您应该将其写为:

$ ./test <strong>[100,200]</strong>

但我认为这样做没有多大意义,你可以将解析部分重写为:

main :: IO ()
main = do
args <- fmap <strong>(map read)</strong> getArgs
case args of
[x,y,a] -> doGeneration x y a
[x,y] -> doGeneration x y 10
_ -> usage

这意味着它将 read单独的每个参数,并用解析的项目构造一个列表,然后我们可以对程序参数的解析部分进行模式匹配。在这种情况下我们仍然可以使用:

$ ./test <strong>100 200</strong>

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

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