Prolog~涉及否定其他声明的决议?

时间:2014-09-25 00:31:25

标签: prolog negation

我有以下代码,其中我将is_max定义为is_below的否定。

rank(mary,1).
rank(juan,2).
rank(john,3).
rank(jane,4).

is_below(X)   :- rank(X,A), rank(Y,B), A<B .
is_max(X)     :- not(is_below(X)) .
如果X在排名方面低于某人,则

is_below为真。因此,具有最高/最高等级的人是is_below为false的人(因此,定义了is_max)。

当我查询

is_max(jane) .

这是真的(以上对于玛丽,胡安和约翰来说是假的)

但是,当我查询

is_max(X) .

这是错误的。我期待着它回归简。我的逻辑似乎很好,所以我不确定为什么我不能得到简。任何见解都会非常感激!

1 个答案:

答案 0 :(得分:2)

Prolog因为失败而被否定。把它想象成“不可证明”。

如果is_max(X)始终为假,则

is_below(X)为真。 {= 1}}对于X = mary是正确的,因此is_below(X)是可证明的,is_below(X)是假的。

因此,最好使用符号is_max(X)代替\+,以提醒自己这不是真的not

修复代码的一种可能方法是显式实例化X:

not