从复杂字符串返回列表

时间:2018-11-08 11:29:57

标签: parsing haskell operators

我从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']

有人可以帮助我吗?

1 个答案:

答案 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分组