gpt4 book ai didi

haskell - 从 Haskell 中的命令行参数解析 CSV 列表

转载 作者:行者123 更新时间:2023-12-02 04:45:31 27 4
gpt4 key购买 nike

我有一个接受一些命令行参数的程序。

假设第一个命令行参数是整数的逗号分隔值 (CSV) 列表。

我想将第一个参数 "1,2,4,8,16" 转换为 [1,2,4,8,16]。我试图将字符串解析为 Int 列表,但出现编译错误。

Haskell 代码:

import System.Environment
import Data.List
import Text.Regex

main = do
args <- getArgs

ints <- if (length args > 1)
then (mapM read (splitRegex (mkRegex ",") (args!!1)))
else [1,3,5] -- defaults
print (ints)

编译错误:

myProg.hs:10:16:
Couldn't match expected type `IO' with actual type `[]'
In the expression: [1, 3, 5]
In a stmt of a 'do' block:
ints <- if (length args > 1) then
(mapM read (splitRegex (mkRegex ",") (args !! 1)))
else
[1, 3, 5]
In the expression:
do { args <- getArgs;
ints <- if (length args > 1) then
(mapM read (splitRegex (mkRegex ",") (args !! 1)))
else
[1, ....];
print (ints) }

我不确定这个类型错误是什么意思。如果有人能向我解释类型错误以及如何修改我的代码以达到预期的结果,我将不胜感激。

最佳答案

您不想使用 <-定义 ints因为你没有在那里执行 IO 操作。你可以只使用 let捆绑。这也让您可以替换对 mapM 的调用用普通的 map .

第一个适当的参数也索引为 0,而不是像您在 C 中看到的那样为 1。您可以使用 head也要做到这一点。

let ints = if   length args >= 1
then map read (splitRegex (mkRegex ",") (head args))
else [1, 3, 5]

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

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