【问题标题】:SWI-Prolog parsing DCG predicate doesn't workSWI-Prolog 解析 DCG 谓词不起作用
【发布时间】: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.

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

【问题讨论】:

  • 改用dcgs --> b. b --> [b], b. b --> [b]. 用法:phrase(b, L).
  • 哇,我把这个复杂化了。谢谢!
  • 更简单:b --> [b], ( [] | b ).

标签: parsing prolog


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多