return 来自复杂字符串的列表
return a list from a complex string
我从 haskell 开始。
我想知道是否可以将字符串转换为不同元素类型的列表:"1*30%4" -> ['1', '*', '30', '%', '4']
without Parsec
我已经找到了答案,但 none 真的帮了我...
喜欢 map (:[]) "1*30%4"
GHCI
或者在 intersperse
.
的帮助下
但我不知道如何保持正确的格式,例如,我的列表中不能有数字或 float/double,因为所有内容都被一一切割:"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 == '.'
pred
函数 returns 当输入为数字或点时为真,否则为假
readAsNumber
需要两个 returns 如果两者都是数字或点则为真
- 最后你按
readAsNumber
对你的字符串进行分组
我从 haskell 开始。
我想知道是否可以将字符串转换为不同元素类型的列表:"1*30%4" -> ['1', '*', '30', '%', '4']
without Parsec
我已经找到了答案,但 none 真的帮了我...
喜欢 map (:[]) "1*30%4"
GHCI
或者在 intersperse
.
但我不知道如何保持正确的格式,例如,我的列表中不能有数字或 float/double,因为所有内容都被一一切割:"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 == '.'
pred
函数 returns 当输入为数字或点时为真,否则为假readAsNumber
需要两个 returns 如果两者都是数字或点则为真- 最后你按
readAsNumber
对你的字符串进行分组