我正在尝试更多地了解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)什么区别?什么时候应该使用短语?
语法规则应始终使用phrase/2-3谓词来访问。当第一个参数被实例化时,Prolog 编译器应该将调用转换phrase/2-3为对被调用语法规则编译生成的谓词的调用。因此,使用phrase/2-3谓词不应该产生任何开销。