【发布时间】:2017-07-08 19:13:25
【问题描述】:
我有一个谓词,目的是解析语法。 语法的产生是:
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.
我认为我的代码的第二行没有按照我的意愿执行,但我不确定如何修复它。
【问题讨论】:
-
改用dcg!
s --> b. b --> [b], b. b --> [b].用法:phrase(b, L). -
哇,我把这个复杂化了。谢谢!
-
更简单:
b --> [b], ( [] | b ).