Parsing 从复杂字符串返回列表
我从哈斯克尔开始 我想知道是否可以将字符串转换为不同元素类型的列表,如:Parsing 从复杂字符串返回列表,parsing,haskell,operators,Parsing,Haskell,Operators,我从哈斯克尔开始 我想知道是否可以将字符串转换为不同元素类型的列表,如:“1*30%4”->['1'、'*'、'30'、'%'、'4'],而不使用Parsec 我已经找到了答案,但没有一个能真正帮助我。。。 类似于带有GHCI的映射(:[])“1*30%4” 或者借助于点缀 但我不知道如何保持正确的格式,例如,我的列表中不能有数字或浮点数/双精度,因为所有内容都被一个接一个地剪切:“1*30%4”->['1'、'*'、'3'、'0'、'%、'4']或“1*30.4%4”->['1'、'*'、'3
“1*30%4”->['1'、'*'、'30'、'%'、'4']
,而不使用Parsec
我已经找到了答案,但没有一个能真正帮助我。。。
类似于带有GHCI的映射(:[])“1*30%4”
或者借助于点缀
但我不知道如何保持正确的格式,例如,我的列表中不能有数字或浮点数/双精度,因为所有内容都被一个接一个地剪切:“1*30%4”->['1'、'*'、'3'、'0'、'%、'4']
或“1*30.4%4”->['1'、'*'、'3'、'0'、'4'、'4'.
有人能帮我吗 正如一些用户所指出的,您的返回类型是
[String]
,而不是[Char]
。您可以通过以下方式轻松实现这一点:
import Data.Char
import Data.List
expresionToList :: String -> [String]
expresionToList = groupBy readAsNumber
where readAsNumber c d = pred c && pred d
pred x = isDigit x || x == '.'
函数的输入为数字或点时返回True,否则返回Falsepred
接受两个值,如果两个值都是数字或点,则返回TruereadAsNumber
- 最后,您可以通过
readAsNumber
pred
函数在where子句中定义。它不是内置功能。