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
  • 对你的字符串进行分组