首页 > 解决方案 > 从复杂字符串返回列表

问题描述

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

有人可以帮助我吗?

标签: parsinghaskelloperators

解决方案


正如一些用户指出的那样,您的返回类型是[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

推荐阅读