我有一个看起来像的字符串
"[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
谢谢。
答案 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.readMaybe
和 Prelude.reads
,正如 Daniel Wagner 在评论中指出的那样。