我有一个字符串,看起来像
"[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
谢谢。
如果要使用digitToInt
,必须导入Data.Char
。你可以在谷歌上自己发现这类事情。(解决这个问题可以让你解决下一个问题——还有一些问题需要解决。)
Haskell已经有一个函数可以做你想做的事情。它叫做read
:
read :: Read a => String -> a
结果是[Int]
有一个Read
实例,所以你可以将strToInt
定义为:
strToInt :: String -> [Int]
strToInt = read
然而,在此情况下,如果您给出一个不符合预期格式的无效字符串,它将抛出以下错误:
> strToInt "incorrect"
*** Exception: Prelude.read: no parse
如果你想要更健壮的处理,你可以看看Text.Read.readMaybe
和Prelude.reads
,正如Daniel Wagner在评论中指出的。