避免在序言中多次回答相同的问题

时间:2019-12-27 18:06:16

标签: prolog

所以我要遍历这个无向图,我应该找到所有与给定顶点相关的顶点。

edge(a, b).
edge(b, c).
edge(c, d).
edge(d, e).
edge(e, f).
edge(f, d).
edge(d, g).
edge(g, f).
edge(g, h).
edge(h, i).
edge(i, j).
edge(j, d).
edge(d, k).
edge(l, m).
edge(m, n).

undirectedEdge(X, Y) :- edge(X, Y).
undirectedEdge(X, Y) :- edge(Y, X).

connected(X, Y) :- undirectedEdge(X, Y).
connected(X, Y) :- connected(X, Z), connected(Z, Y), X \= Y.

一旦我输入connected(a, X).,它就会陷入无限循环。 我知道为什么会有它,但是我不知道如何避免它,也许我可以在这里找到一些帮助?

1 个答案:

答案 0 :(得分:2)

使用closure0/3optional-resource.prod.yml,我们得到:

setof/3