定条款语法 - 序言(Definite Clause Grammar - Prolog)

2019-10-21 06:23发布

下面我有一个明确的条款语法应该接受字符串aabccc当我测试的语法,但是,唯一的字符串我能够得到接受了abc

我敢肯定,我已经摆脱了左手递归的,所以我不知道发生了什么错误。

s --> x, y, z.
x --> [a], x.
x --> [a].
y --> [b], y.
y --> [b]. 
z --> [c], z.
z --> [c].

另外,我想能够定义上面的语法为...

s --> x, y, z.
x --> [a], x; [a].
y --> [b], y; [b].
z --> [c], z; [c].

Answer 1:

按预期语法工作的两个版本:

?- phrase(s, [a,a,b,b,c,c,c], R).
R = [] .

?- phrase(s, [a,a,b,b,c,c,c]).
true .

也许问题是,你要调用它不与如[a,a,b,b,c,c,c]标记,但与列表aabccc原子? 如果是这样的话,你可以使用标准的atom_chars/2内置谓词原子转换成字符的列表:

?- atom_chars(aabccc, Tokens).
Tokens = [a, a, b, c, c, c].


文章来源: Definite Clause Grammar - Prolog