查询结束时附加“ false”

时间:2018-11-07 23:41:17

标签: prolog prolog-toplevel

基本上,我想知道为什么我对新谓词g的定义之一导致查询以“ false”结尾,而另一个定义直接跳回“?-”。

给出这样的数据库:

f(a,b).
f(b,c).
f(c,d).

我想产生一个新的谓词,该谓词表示f的某种可传递闭包,此外还应包含有关如何创建元素的列表。即我想要一个g这样的?- g(X,Y,Z).会产生这样的结果:

g(a,c,[f(a,b),f(b,c)]).
g(b,d,[f(b,c),f(c,d)]).
g(a,d,[f(a,b),f(b,c),f(c,d)])

我介绍了一个辅助连接谓词:

con([],L,L).
con([X|L1],L2,[X|C]):-con(L1,L2,C).

然后我尝试解决的方法是:

g(X,Z,[f(X,Y),f(Y,Z)]):-f(X,Y),f(Y,Z).
g(X,Z,C):-f(Y,Z),g(X,Y,L),con(L,[f(Y,Z)],C).

在产生正确输出的同时,最后还会打印另外false.

?-g(X,Y,Z).
X = a,
Y = c,
Z = [f(a, b), f(b, c)] ;
X = b,
Y = d,
Z = [f(b, c), f(c, d)] ;
X = a,
Y = d,
Z = [f(a, b), f(b, c), f(c, d)] ;
false.

像这样的简单定义:

g(X,Y):-f(X,Y).

产生

g(a,b).
g(b,c).
g(c,d).

没有'false'。

这是否意味着我的程序有错误?如果是,那是什么?

0 个答案:

没有答案