序言中缺失事实的否定
Negation of absent fact in prolog
假设我有;
goal(A,B) :- goal1(A,C), \+ goal2(C,B).
但现在假设 goal(c,b)
无法推断。
如果我查询,\+ goal(c,b)
然后我得到 true
但是,如果我查询 goal(a,B)
,那么我不会得到 B=b
,因为它甚至不检查 goal2(c,b)
(因为无法推断)。它只是检查所有当前的事实 goal2(C,B)
并只挑选那些错误的。
这就是问题所在。当我查询 goal(a,B)
之类的内容时,我想 B=b
作为答案。在序言中有可能吗?请注意,我不想在序言中插入像 goal(c,b):-false
这样的负面事实。
谢谢。
尝试根据您的问题进行猜测,假设我们有:
p(a, 1).
p(c, 2).
p(d, 1).
p(e, 2).
并且您想查询所有 p/2 其中第二个参数是 而不是 2,您可以这样做:
?- p(X, Y), Y \== 2.
或:
?- dif(Y, 2), p(X, Y).
阅读文档看看有什么区别。 SO 上有很多问题讨论这个问题。
假设我有;
goal(A,B) :- goal1(A,C), \+ goal2(C,B).
但现在假设 goal(c,b)
无法推断。
如果我查询,\+ goal(c,b)
然后我得到 true
但是,如果我查询 goal(a,B)
,那么我不会得到 B=b
,因为它甚至不检查 goal2(c,b)
(因为无法推断)。它只是检查所有当前的事实 goal2(C,B)
并只挑选那些错误的。
这就是问题所在。当我查询 goal(a,B)
之类的内容时,我想 B=b
作为答案。在序言中有可能吗?请注意,我不想在序言中插入像 goal(c,b):-false
这样的负面事实。
谢谢。
尝试根据您的问题进行猜测,假设我们有:
p(a, 1).
p(c, 2).
p(d, 1).
p(e, 2).
并且您想查询所有 p/2 其中第二个参数是 而不是 2,您可以这样做:
?- p(X, Y), Y \== 2.
或:
?- dif(Y, 2), p(X, Y).
阅读文档看看有什么区别。 SO 上有很多问题讨论这个问题。