【问题标题】:Not getting full result when output is on one line当输出在一行时没有得到完整的结果
【发布时间】: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


【解决方案1】:
graph(Graph),writeln(Graph).

writeln/1 将整个变量写入输出。

来自@WillemVanOnsem

如果你写graph(G);true.,那么程序将在第一条语句之后暂停。接下来你可以点击 W ,它会再次写出答案,但现在是完整的。

【讨论】:

  • ` ?- graph(Graph),writeln(Graph).` [a-e,b-a,c-b,d-a,d-c,e-c,e-d,f-b,a-b,a-d,b-c,b-f,c-d,c-e,d-e,e-a] Graph = [a-e, b-a, c-b, d-a, d-c, e-c, e-d, f-b, ... - ...|...].
  • 感谢您的回答
  • 是的问题解决了....我只是想问一下,有什么方法可以将 prolog 中的结果获取或转换为图形表示(获取节点和连接边)?
  • @StambouliA.ouadoud 这将是一个新问题,但我认为有吗?问一个新问题,就会有人知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 2012-12-31
  • 2020-02-03
  • 2016-06-24
  • 1970-01-01
  • 2014-04-29
  • 2015-12-21
相关资源
最近更新 更多