什么时候在Prolog中使用短语?

use*_*966 5 prolog dcg

我正在尝试更多地了解Prolog中的DCG,并在阅读不同来源时,我注意到在某些情况下短语没有被使用?

在Learn Prolog Now网站上,它提供了以下示例:

s   -->  np,vp. 
np  -->  det,n. 
vp  -->  v,np. 
vp  -->  v. 
det -->  [the]. 
det -->  [a]. 
n   -->  [woman]. 
n   -->  [man]. 
v   -->  [shoots].
Run Code Online (Sandbox Code Playgroud)

然后,他们使用查询s(X,[])生成语法中的所有句子.我试过phrase(s,L),它也生成了语法描述的所有句子.

使用s(X,[])和有phrase(s,L)什么区别?什么时候应该使用短语?

Pau*_*ura 3

语法规则应始终使用phrase/2-3谓词来访问。当第一个参数被实例化时,Prolog 编译器应该将调用转换phrase/2-3为对被调用语法规则编译生成的谓词的调用。因此,使用phrase/2-3谓词不应该产生任何开销。

  • 对于现在的学习序言来说,​​这是一个糟糕的建议!网站。他们甚至没有提到“phrase/2-3”。 (3认同)