我有2条简单的规则,它们定义了是否有2个变量在关系中
祖父:grandfather(X,Y):-male(X), parent(X,Z), parent(Z,Y).
父亲:svekr(X,Y):-male(X), female(Y),parent(X,Z),(marriage(Z,Y);marriage(Y,Z)).
对于祖父,当我尝试使用;
获得所有可能的结果时,程序会给我答案yes
。
这就是我在说的:
如您所见,程序了解没有更多可能的解决方案,因此该程序给出的最终答案是X = pat
和Y = tony
,未经证实。
但是对于岳父来说,是这样的:
这一次,程序确实询问是否需要找到其他解决方案,它将失败,答案为否。 所以我的问题是,为什么在一种情况下它给出没有确认的“是”而在另一种情况下给出没有确认的“否”?
中的完整代码答案 0 :(得分:0)
考虑
a(1).
a(2).
导致
?- a(X).
X = 1 ;
X = 2.
true.
Prolog知道a(2)
之后没有规则,因此可以给出明确的答案。
现在,另一方面:
a(1).
a(2).
a(3) :- 0 > 1.
在a(2)
之后,我们看到另一个规则,给出另一个选择点。这就像一扇关闭的门-您可以选择尝试将其打开,但是您不知道后面是否有东西或它是否会打开。但是,Prolog看到门,问您是否应该尝试:
a(X).
X = 1 ;
X = 2 ;
false.
由于此特定门已锁定(0不大于1),因此它以false
响应,表示“我找不到另一个答案”。
尽管有时可能会影响性能,但是您通常可以忽略额外的选择点。