提问人: 提问时间:11/9/2012 更新时间:11/9/2012 访问量:3422
Prolog 中的正则表达式
Regular Expressions in 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.
据我所知,其他功能工作正常。有人能告诉我我在处理星星时哪里出了问题吗?
谢谢!
答:
0赞
user766650
11/9/2012
#1
啊,没关系,我是个傻瓜。我需要改变
match(star(R), W) :- match(R, eps).
到只是
match(star(R), []).
我不断收到堆栈溢出,因为没有基本情况。我猜是生活和学习!
评论
0赞
nhahtdh
11/9/2012
如果它返回 false,则它不是 stackoverflow。
评论
bbbbbb
a*b