Возникли проблемы с внедрением Regex в Haskell - PullRequest
0 голосов
/ 17 апреля 2019

Итак, у меня назначено задание, и он просит использовать RegEx с Haskell, чтобы найти решение. Я свяжу это внизу. По сути, мои проблемы не лежат в Regex, я понимаю, как найти 2As, используя Regex нормально, но когда дело доходит до Haskell и этого объявления, я не знаю, как на самом деле сделать это, не найдя ошибки.

Я попробовал свои собственные реализации RegEx: это [AA] {2} в случае просто нахождения 2 As, но я не могу понять, как заставить его работать в Haskell, и данное заявление было намного более запутанным.

module Project3 where

data RE a
    = Symbol a
    | Empty
    | RE a :+: RE a
    | RE a :|: RE a
    | Repeat (RE a)
    | Plus (RE a)
    deriving (Show, Read, Eq, Ord)

data ABC = A | B | C deriving (Show, Read, Eq, Ord)


atMost2As :: RE ABC
atMost2As = undefined 

Это текущая проблема. Я пытался возиться с '= ~ "[AA] {2}"' и подобными понятиями, но я все еще получаю ошибки, так как это не требует аргументов.

Язык atMost2As включает в себя именно те строки, в которых A встречается не более двух раз, это то, что он должен дать. В целом, я не могу найти проблему.

1 Ответ

1 голос
/ 17 апреля 2019
atMost2As :: RE ABC
atMost2As = undefined 

Как я уже упоминал в комментариях, разумная реализация этого может быть:

atMost2As = (a :+: a) :|: (a :|: Empty)
  where
    a = Symbol A

Здесь описывается регулярное выражение, в котором не более двух a с: либо два a с, либо один a, либо решение Empty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...