如果我在PROLOG中有一个事实“安娜是一个人”,我会写例如:
person(anna).
但是,如果我有一个事实“表不是人”,我该怎么写。我尝试过
not(person(table)).
但这不起作用。我该如何写负面事实?
答案 0 :(得分:3)
实际上你可以使用像 person(table):-false.
答案 1 :(得分:2)
在Prolog中,通常不必断言否定事实。缺少肯定事实或证明规则会导致失败(或更准确地说,是“缺乏可证明性”)。
因此,如果您仅断言person(anna)
,则查询person(anna).
将为true(成功或可证明),而person(table).
将为false(失败或不可证明) )。此外,查询person(X).
仅会产生预期的X = anna
。
默认情况下,如果查询person(X)
并且没有定义人员,则Prolog将给出错误,指示person
是未知谓词。如果您希望Prolog仅在这种情况下失败,则可以设置一个选项(我在SWI Prolog中特别知道,但我不记得该选项是什么),或者可以声明person/1
为如果您打算在程序执行时将person
个事实动态地声明到数据库中,则为动态谓词。
作为谓词定义的一部分,您可能要指出,温血动物是哺乳动物,而不是人。在这种情况下,您可能会:
warm_blooded_animal(X) :-
mammal(X),
\+ person(X).
这只是一个例子。在这种情况下,您更有可能根据温血等特征来定义mammal
,而不是相反。但是您有个主意...请注意,不赞成使用运营商not/1
,而推荐使用ISO标准\+/1
。