所以我要交一个作业,它要求与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出现不超过两次,这正是它应该产生的。总的来说,我找不到问题。
答案 0 :(得分:1)
atMost2As :: RE ABC
atMost2As = undefined
正如我在评论中提到的那样,对此的合理实现可能是:
atMost2As = (a :+: a) :|: (a :|: Empty)
where
a = Symbol A
这描述了一个正则表达式,其中最多有两个a
:或者有两个a
,或者有一个a
,或者解决方案是Empty