我从haskell开始。
我想知道我是否可以将字符串转换为不同元素类型的列表,如:"1*30%4" -> ['1', '*', '30', '%', '4']
而无需Parsec
我已经找到答案了,但没有一个能真正帮助我...
像map (:[]) "1*30%4"
和GHCI
或在intersperse
的帮助下。
但是我不知道如何保持正确的格式,例如,我不能在列表中使用数字或浮点数/双精度字,因为所有内容都是一一对应的:"1*30%4" -> ['1', '*', '3', '0', '%', '4']
或"1*30.4%4" -> ['1', '*', '3', '0', '.', '4', '%', '4']
有人可以帮助我吗?
答案 0 :(得分:3)
正如一些用户指出的那样,您的返回类型是[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 == '.'
pred
函数的输入为数字或点时返回True,否则返回False
readAsNumber
接受两个返回值,如果两个都是数字或点,则返回True
readAsNumber
分组