PROLOG查询中是/否返回

时间:2018-04-14 18:07:21

标签: prolog prolog-toplevel

我刚刚学习PROLOG,我很难理解为什么我正在执行的查询导致'是/否'结束。这是我的知识产权:

male(albert).
male(bob).
male(bill).
male(carl).
male(charlie).
male(dan).
male(edward).

female(alice).
female(betsy).
female(diana).

parent(albert, bob).
parent(albert, betsy).
parent(albert, bill).

parent(alice, bob).
parent(alice, betsy).
parent(alice, bill).

parent(bob, carl).
parent(bob, Charlie).

然后我执行以下查询:

 ?-female(X).

返回:

X = alice ? ; 
X = betsy ? ;
X = diana
yes

当我查询时:

 ?-parent(X, bob).

我回来了:

 X = albert ?;
 X = alice ?;
 no

为什么一个导致'是',另一个导致'不'?

1 个答案:

答案 0 :(得分:0)

取决于Prolog系统,顶层如何显示答案替换。 特别是顶层是否可以检测确定性查询成功。 后者意味着查询成功,并且没有留下选择点。

例如,GNU-Prolog,SWI-Prolog,Jekejeke Prolog都可以检测确定性查询成功,并且不会提示最终用户是否要进一步替换答案。由于没有选择点时,只会再有一个答案。

使用确定性查询成功检测:

?- female(X).
X = alice ;
X = betsy ;
X = diana.

没有确定的查询成功检测:

?- female(X).
X = alice ;
X = betsy ;
X = diana ;
no

实际上,没有Prolog系统会在上一个分号后的帖子中显示“是”。这是不可能的,我会认为Prolog系统已损坏。