我刚刚学习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
为什么一个导致'是',另一个导致'不'?
答案 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系统已损坏。