вернуть список из сложной строки - PullRequest
0 голосов
/ 08 ноября 2018

Я начинаю с haskell.

Мне было интересно, смогу ли я преобразовать строку в список типа элемента другого типа: "1*30%4" -> ['1', '*', '30', '%', '4'] без Parsec

Я уже нашел ответы, но никто не помог мне ... как map (:[]) "1*30%4" с GHCI или с помощью intersperse.

но я не знаю, как сохранить правильные форматы, я не могу, например, иметь числа или float / double в моем списке, потому что все обрезается один за другим: "1*30%4" -> ['1', '*', '3', '0', '%', '4'] или "1*30.4%4" -> ['1', '*', '3', '0', '.', '4', '%', '4']

Кто-то может мне помочь?

1 Ответ

0 голосов
/ 08 ноября 2018

Как отмечают некоторые пользователи, ваш возвращаемый тип - [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
...