如何将“[int, int..]”形式的字符串转换为 int 列表?

时间:2021-02-18 19:13:24

标签: string list haskell

我有一个看起来像的字符串

"[1, 45, 3, 4, 54, 299]"

虽然长度是任意的。列表不止一个,这只是一个例子。 我想将其转换为整数列表,例如

[1, 45, 3, 4, 54, 299]

我试过了

strToInt :: String -> [Int]
strToInt xs = map digitToInt $ filter (`elem` ["0"..]) xs

但它不起作用。

error:
    Variable not in scope: digitToInt :: [Char] -> Int
   |
   | gh5 xs = map digitToInt $ filter (`elem` ["0"..]) xs

谢谢。

2 个答案:

答案 0 :(得分:1)

要使用 digitToInt,您必须导入 Data.Char。您可以使用 Hoogle 亲自发现这种事情。 (解决这个问题会让你解决下一个问题——还有一些需要解决。)

答案 1 :(得分:1)

Haskell 已经有一个函数可以做你想做的事。它叫做read

read :: Read a => String -> a

事实证明,Read 有一个 [Int] 实例,因此您可以将 strToInt 定义为:

strToInt :: String -> [Int]
strToInt = read

然而,鉴于此,如果您提供与预期格式不匹配的无效字符串,则会抛出以下错误:

> strToInt "incorrect"
*** Exception: Prelude.read: no parse

如果您想要更强大的处理,您可以查看 Text.Read.readMaybePrelude.reads,正如 Daniel Wagner 在评论中指出的那样。