我正在尝试进行正则表达式匹配.我已经写出了所有的功能,但是他们没有按照他们的意愿工作.据我所知,当我尝试比较列表时,它有一个问题.
例如,“re_contains(a,a).”给出真实(显然),“re_contains(union(a,b),a)”.
例如,“re_contains(a,a).”给出真实(显然),“re_contains(union(a,b),a)”.
但是,只要我将其列为清单,它就会失败. “re_contains(seq(a,[a,b]).”返回false.附加应该通过所有可能的组合来查找匹配,但这些功能都不能正常工作.这让我觉得我可能错过了一个基本案例.但我认为“re_contains(X,L): – X == L.”应该照顾它.我必须在这里寻找重要的东西.
这是我的代码:
re_contains(empty,[]). re_contains(X,L) :- X == L. re_contains(seq(X,Y),L) :- append(L1,L2,L),re_contains(X,L1),re_contains(Y,L2). re_contains(union(X,_),L) :- re_contains(X,L). re_contains(union(_,L) :- re_contains(Y,L). re_contains(kleene(X),L) :- append([Car|L1],[Car|L1]),re_contains(kleene(X),L2). re_contains(kleene(_),[]).
append / 3将分割L,L1和L2都将成为列表.
原文链接:https://www.f2er.com/regex/356728.html我会尝试用re_contains(X,[X])替换re_contains(X,L): – X == L.
更改后,re_contains(a,a).将失败.
您以不同的方式表示序列,而您的匹配器不提供两者.实际上,唯一的“工作”案例不是序列.