gpt4 book ai didi

prolog - 这个 Prolog 谓词中的第二个参数的作用是什么?为什么是空的?

转载 作者:行者123 更新时间:2023-12-02 08:43:17 26 4
gpt4 key购买 nike

this page详细介绍了 Prolog 中的 DCG,它提供了以下示例语法:

s  -->  np,vp. 

np --> det,n.

vp --> v,np.
vp --> v.

det --> [the].
det --> [a].

n --> [woman].
n --> [man].

v --> [shoots].

可以这样使用:

s([a,woman,shoots,a,man],[]).

第二个参数是做什么的?这是为什么[]还是空的?我想你应该打电话s([a,woman,shoots,a,man]).但这是行不通的。

有人可以解释一下传递空列表在这里可以完成什么以及它有什么作用吗?

最佳答案

我强烈建议始终使用phrase/2接口(interface)访问DCG。

原因是您不应依赖 DCG 子句的任何特定扩展方法。您的系统可能会按照本页所述的方式扩展 DCG,但依赖此属性会阻止许多原本可能实现的优化。

就您而言,您应该阅读 phrase/2 的含义,并像这样使用它:

?- phrase(NT, Ls).

其含义是 DCG 非终结符 NT 描述列表 Ls

因此,您会发现这里甚至看不到任何空列表!因此,对于初学者来说,使用 phrase/2 比思考附加参数更容易使用 DCG。

如果您确实需要访问列表的其余部分(这有时很有用),您始终可以使用 phrase/3。事实上,phrase(NT, Ls)phrase(NT, Ls, []) 的简写,但您不必这么快担心这一点。当您对 Prolog 有了更多的使用经验时,您就会自然而然地掌握它。

关于prolog - 这个 Prolog 谓词中的第二个参数的作用是什么?为什么是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32826955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com