regex - Prolog 中的正则表达式

标签 regex prolog

为了了解一点 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/

相关文章:

prolog - 如何应用findall查找多个字段|序言

regex - notepad++ 使用正则表达式删除两个字符串之间的文本

c# - 正则表达式 - 正确的模式

JavaScript 正则表达式/^(19|20)([0-9]{2})-([0-9]{2}|0[0-9]{1})-([0-9]{2} |0[0-9]{1})$/g 未找到日期作为输入值

Prolog 两个列表交集 - 为什么它不断检查?

Prolog:尝试解决一个难题!返回错误

javascript - 使用 javascript 正则表达式使引用的文本变得漂亮

regex - 以前面的字符串为条件(对于书籍索引),增加除一个或多个(以逗号分隔)之外的所有数字

list - Prolog:将列表中的所有原子小写

prolog - 术语平等/不平等的具体化