Prolog断言不同的解决方案案例

时间:2019-02-28 20:28:29

标签: prolog

我有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。 这就是我在说的:

enter image description here

如您所见,程序了解没有更多可能的解决方案,因此该程序给出的最终答案是X = patY = tony,未经证实。

但是对于岳父来说,是这样的:

enter image description here

这一次,程序确实询问是否需要找到其他解决方案,它将失败,答案为否。 所以我的问题是,为什么在一种情况下它给出没有确认的“是”而在另一种情况下给出没有确认的“否”?

此处https://pastebin.com/9HpEnuAz

中的完整代码

1 个答案:

答案 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响应,表示“我找不到另一个答案”。

尽管有时可能会影响性能,但是您通常可以忽略额外的选择点。