【发布时间】:2017-03-09 16:35:40
【问题描述】:
我是 Prolog 的新手,我正在尝试对图表进行一些操作。
我的实现有一个问题,由于暴露的时间很长很复杂,我就给出一个简单类似的问题。
假设我们有以下图表:
edge(a,e).
edge(e,d).
edge(d,c).
edge(c,b).
edge(b,a).
edge(d,a).
edge(e,c).
edge(f,b).
我想让这个图双向。我使用以下代码:
graph(Graph):-findall(A-B, edge(A,B), L),
findall(B-A, edge(A,B), L1),
append(L, L1, Graph).
执行查询时我得到这个结果:
?- graph(Graph).
Graph = [a-e, b-a, c-b, d-a, d-c, e-c, e-d, f-b, ... - ...|...].
我的问题不在代码中我的问题在结果中,如您所见,我没有得到完整的结果,它总是只给我 8 条边,其余的没有显示。
如何解决这个问题?
【问题讨论】:
-
如果你点击 w,它将写入完整列表。
-
@WillemVanOnsem 据我所知,不在 SWI-Prolog 中。
-
@JimAshworth:如果你写
graph(G);true.,那么程序将在第一条语句之后暂停。接下来你可以点击W,它会再次写出答案,但现在是完整的。 -
@WillemVanOnsem 啊,所以只有在查询仍处于“活动”状态时才有用 - 很高兴知道,谢谢。
标签: prolog swi-prolog prolog-toplevel