假设我有以下理论:
a(X) :- \+ b(X).
b(X) :- \+ c(X).
c(a).
它只是说真的,这当然a(X)是正确的,因为不存在b(X)(否定作为有限失败)是真的。因为只有 ab(X)如果没有c(X),而我们有c(a),所以可以说这是真的。但是我想知道为什么 Prolog 不提供答案X = a?比如说我介绍了一些语义:
noOrphan(X) :- \+ orphan(X).
orphan(X) :- \+ parent(_,X).
parent(david,michael).
当然,如果我查询noOrphan(michael),这将导致trueand noOrphan(david)in false(因为我没有为 定义父david级)。但是我想知道为什么没有主动方法来检测哪些人(michael,david,...)属于该noOrphan/1关系?
这可能是 Prolog 的回溯机制的结果,但 Prolog 可以保持一种状态,该状态可以验证一个人是在以积极的方式(0,2,4,...)深度否定,还是以消极的方式(1,3 ,5,...) 深度否定。