Prolog何时中断线?

时间:2019-06-21 16:10:16

标签: prolog prolog-toplevel

在Prolog中考虑以下示例程序:

p(0).
p(1).

b1(T) :-
   T = tri(X, Y, Z), p(X), p(Y), c(T), !, p(Z).

c(tri(X, X, _Z)).

SWI Prolog为某些查询提供了一些有趣的答案:\

?- b1(tri(0, Y, Z)).
Y = Z, Z = 0 ;
Y = 0,
Z = 1.

请注意,它确实在第二个答案中打断了行,但在第一个答案中没有。

这让我想知道,换行的确切规则是什么? SWI Prolog何时打破界限,何时不打破界限?这取决于什么?

1 个答案:

答案 0 :(得分:2)

所有绑定(变量=值)都显示在自己的行上,除非两个或多个变量绑定到相同的值。在这种情况下,它会在一行上使用以下语法。

{{1}}

这样做是因为知道两个变量具有相同的值很有价值。 SWI-Prolog中的答案被打印为有效的Prolog程序。没有进一步的承诺,版本,顺序等可能会在版本之间更改,恕不另行通知。如果要让计算机读取结果,请不要使用顶层。