假设我有一个数据库
p1(red).
p1(green).
p2(green).
我如何找到 p1 中但不在 p2 中的所有东西(即红色)
最佳答案
How do I find all the things that are in p1 but not in p2 (ie. red)
在这个特别简单的例子中,只需要问:
?- p1(X), \+ p2(X).
X = red
; false.
但是,对于更复杂的程序,该方案不能轻易扩展。许多语义问题必须得到解决。喜欢...
...非单调性。当您添加事实 p2(red)
时,查询将失败。所以这个程序本质上是非单调的。
...实例化不足。当术语更复杂而不是基础时,就会发生这种情况。
...不一致。当您想在程序中同时使用 CLP(FD) 等约束时,就会发生这种情况。 \+ p2(X)
的意外失败可能是结果。
关于序言 : find something not referenced in another predicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708713/