将Regex实施到Haskell时遇到问题

时间:2019-04-17 04:42:42

标签: regex haskell

所以我要交一个作业,它要求与Haskell一起使用RegEx提出解决方案。我将在底部链接它。基本上,我的问题不在Regex中,我了解如何正常使用Regex查找2A,但是当涉及Haskell和此声明时,我不知道如何在不发现错误的情况下进行实际操作。

我已经尝试了自己的RegEx实现:在仅找到2个As的情况下为[AA] {2},但是我一生无法弄清楚如何使其在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 个答案:

答案 0 :(得分:1)

atMost2As :: RE ABC
atMost2As = undefined 

正如我在评论中提到的那样,对此的合理实现可能是:

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

这描述了一个正则表达式,其中最多有两个a:或者有两个a,或者有一个a,或者解决方案是Empty