6

为了了解 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.

据我所知,其他功能工作正常。有人能告诉我我在处理明星方面哪里出错了吗?

谢谢!

4

1 回答 1

0

啊,别管我是个傻瓜。我需要改变

match(star(R), W) :- match(R, eps).

只是

match(star(R), []).

我不断收到 stackoverflows,因为没有基本案例。生活和学习我猜!

于 2012-11-09T03:47:20.083 回答