解析DCG谓词的SWI-Prolog不起作用

时间:2017-07-08 19:13:26

标签: parsing prolog

我有一个谓词,目的是解析语法。 语法的产生是:

S-> B B->bB B->b

谓词用于接收列表并确定列表是否属于语法。我的代码如下:

s(List,[]):- b(List,[]).
b(List,[]):-'C'(List,b,X), b(X,[]).
b([b|List],List).

谓词似乎能够确定[b]是一个解决方案,但是,它无法检测到[b,b,b]也是一个解决方案。

例如,

?-s([b],[]).
 true.
?-s([b,b,b],[]).
 false.

我认为我的代码的第二行并没有按照我的意愿行事,但我不确定如何修复它。

1 个答案:

答案 0 :(得分:1)

如果您愿意了解Prolog和DCG的基础知识,请参阅此解决方案:

s(List):- b(List,[]).
b([b|List],Rest):- b(List,Rest).
b([b],[]).