为了了解一点 Prolog 中的正则表达式,我正在尝试编写函数来确定输入是否符合模式;我的功能如下:
split(W, [[], W]).
split([X|W], [[X|W1], W2]) :- split(W, [W1, W2]).
match(eps, []).
match(symb(A), [ A ]).
match(union(R1, R2), W) :- match(R1, W).
match(union(R1, R2), W) :- match(R2, W).
match(conc(R1, R2), W) :- split(W, [W1, W2]), W1 \= [], W2 \= [], match(R1, W1), match(R2, W2).
match(star(R), W) :- match(R, eps).
match(star(R), W) :- split(W, [W1, W2]), W1 \= [], match(R, W1), match(star(R), W2).
我在 SWIPL 中输入以下内容并得到以下结果:
?- match(star(symb(a)),[a,a,a,a]).
false.
?- match(star(symb(b)),[b]).
false.
据我所知,其他功能运行正常。有人可以告诉我处理星星时哪里出了问题吗?
谢谢!
最佳答案
啊,没关系,我是个傻瓜。我需要改变
match(star(R), W) :- match(R, eps).
只是
match(star(R), []).
我不断收到 stackoverflows,因为没有基本案例。我想,活到老,学到老!
关于regex - Prolog 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13301709/