我有以下代码,其中我将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) .
这是错误的。我期待着它回归简。我的逻辑似乎很好,所以我不确定为什么我不能得到简。任何见解都会非常感激!
答案 0 :(得分:2)
Prolog因为失败而被否定。把它想象成“不可证明”。
如果is_max(X)
始终为假,则 is_below(X)
为真。 {= 1}}对于X = mary是正确的,因此is_below(X)
是可证明的,is_below(X)
是假的。
因此,最好使用符号is_max(X)
代替\+
,以提醒自己这不是真的not
。
修复代码的一种可能方法是显式实例化X:
not