验证Haskell中的多位数整数

验证Haskell中的多位数整数,haskell,Haskell,我正在编写一个小的标记器程序,分别识别每个字符串输入。然而,当我用多位数(比如“256”)测试它时,它给了我一个字符串标记[2,5,6],这不是我所期望的 import Data.Char data Token = Number Integer deriving (Show, Eq) tokenize :: String -> [Token] tokenize (c:cs) | isDigit c = Number (read [c]) : tokenize cs

我正在编写一个小的标记器程序,分别识别每个字符串输入。然而,当我用多位数(比如“256”)测试它时,它给了我一个字符串标记[2,5,6],这不是我所期望的

import Data.Char
data Token = Number Integer
     deriving (Show, Eq)

tokenize :: String -> [Token]
tokenize (c:cs)
     | isDigit c = Number (read [c]) : tokenize cs
     | otherwise = error
如何使
isDigit
处理大于9的整数?(有两个或更多数字)

这是一个提示:

> import Data.Char
> span isDigit "123abc456"
("123","abc456")
span isDigit
返回一对:仅由数字组成的最长前缀,以及字符串的其余部分。

这是一个提示:

> import Data.Char
> span isDigit "123abc456"
("123","abc456")

span isDigit
返回一对:仅由数字组成的最长前缀,以及字符串的其余部分。

您编写它的方式将不会编译-
isDigit
tokenize
相同吗?你能给我们你的工作代码吗?除了我的评论之外,一个简单的
tokenize s=[Number$read s]
将完成这个部分的工作(如果你希望
tokenize“256”=[Number 256]
我刚刚编辑了代码。我想我必须去掉
tokenize cs
部分,因为你编写它的方式不会编译-
isDigit
tokenize
相同吗?你能给我们你的工作代码吗?除了我的评论之外,一个简单的
tokenize s=[Number$read s]
将完成这部分的工作(如果您希望
tokenize“256”=[Number 256]
我刚刚编辑了代码。我想我必须摆脱
tokenize cs
部分,但如果我尝试
123+456
它会不会变成
[123,+456]
?因为加号与
456
@Walle一起被视为一个字符串。是的。你仍然需要一些递归,就像在你发布的代码中一样,还需要处理
+
或你的语言中可能有的其他非数字标记。是的,但是如果我尝试
123+456
它不会变成
[123,+456]
?由于加号与
456
@Walle一起被视为一个字符串,因此您仍然需要在发布的代码中进行一些递归,以及处理
+
或您语言中可能有的其他非数字标记。