我有一个谓词,目的是解析语法。 语法的产生是:
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.
我认为我的代码的第二行并没有按照我的意愿行事,但我不确定如何修复它。
答案 0 :(得分:1)
如果您愿意了解Prolog和DCG的基础知识,请参阅此解决方案:
s(List):- b(List,[]).
b([b|List],Rest):- b(List,Rest).
b([b],[]).