gpt4 book ai didi

prolog - 在序言中,为什么不单独添加 “edge(X, Y) :- edge(Y, X).”才能将有向图定义转换为无向图

转载 作者:行者123 更新时间:2023-12-04 17:00:26 28 4
gpt4 key购买 nike

我只是在学习Prolog,并且正在复习讲义,而所有讲义都说:

给定有向图的以下定义:

path(X, Y) :- edge(X, Y).
path(X, Y) :- edge(X, Z), path(Z, Y).

如果我们想使其成为无向图,则定义
单独的 edge(X, Y) :- edge(Y, X).无法正常工作,我不知道为什么。
如果Y到X有边,则X到Y有边。似乎对我有意义。

这些说明并没有真正说明为什么不这样做,但确实定义了正确的解决方案是:
edge1(X, Y) :- edge(X, Y).
edge1(X, Y) :- edge(Y, X).

到我们已经拥有的。

任何人都可以向我解释一下,谢谢! <3

最佳答案

因为规则与事实不一样,并且如果使用相同的谓词,您将陷入无限循环。

让我们以?-edge(5,2)为例。我们最终会调用-

edge(5,2) :- edge(2,5).

好的,当我们调用 edge(2,5)时会发生什么?
edge(2,5) :- edge(5,2).

嗯逻辑圈。

当使用 edge1时,您只是为谓词创建一个包装器以逃避递归定义。

关于prolog - 在序言中,为什么不单独添加 “edge(X, Y) :- edge(Y, X).”才能将有向图定义转换为无向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051781/

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