如何在PROLOG中做出否定事实

时间:2019-10-09 09:54:50

标签: prolog

如果我在PROLOG中有一个事实“安娜是一个人”,我会写例如:

person(anna).

但是,如果我有一个事实“表不是人”,我该怎么写。我尝试过

not(person(table)).

但这不起作用。我该如何写负面事实?

2 个答案:

答案 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

相关问题