Как разобрать целые числа из строки в Haskell - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь разобрать строки в формате:

(x,y) (r,g,b)

Мой файл содержит строку такого типа в каждой строке. Я уже извлек строки, теперь я хочу извлечь их значения, но я не мог найти что-то удовлетворяющее. Я хотел сделать что-то вроде:

case str of
['(', x, ',', y, ')', ' ', '(', r, ',', g, ',', b, ')'] -> The rest

Я знаю, что это не работает, я новичок в Haskell, поэтому я продолжаю сталкиваться с ошибками, которые не понимаю. Как я могу это сделать?

РЕДАКТИРОВАТЬ: Я создал это раньше, но я не знаю, как его реально использовать после создания переменной:

data Points = Point Coords Colors
data Colors = Color Float Float Float
data Coords = Coord Int Int

Числа не ограничены одной цифрой, r, g и b находятся в диапазоне от 0 до 255.

1 Ответ

4 голосов
/ 19 апреля 2019

Легкий взлом для этой конкретной задачи:

data Pix = Pix (Int,Int) (Int,Int,Int)
 deriving (Read, Show)

parsePix :: ReadS Pix
parsePix s = reads $ "Pix "++s
*Main> parsePix "(1,2) (3,4,5)"<br>[(Pix (1,2) (3,4,5),"")]

В общем, вам следует изучить соответствующие библиотеки синтаксического анализатора, но я рекомендую мегапарсек .

...