假设我有以下理论:
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)
,这将导致true
and noOrphan(david)
in false
(因为我没有为 定义父david
级)。但是我想知道为什么没有主动方法来检测哪些人(michael
,david
,...)属于该noOrphan/1
关系?
这可能是 Prolog 的回溯机制的结果,但 Prolog 可以保持一种状态,该状态可以验证一个人是在以积极的方式(0,2,4,...)深度否定,还是以消极的方式(1,3 ,5,...) 深度否定。