序言 : find something not referenced in another predicate

标签 prolog

假设我有一个数据库

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/

相关文章:

database - SWI Prolog 程序可以从外部数据库中获取事实吗?

Prolog - 查找列表列表(列表)的所有组合(产品)

prolog - 自动显示结果?

prolog - bagof/3是不可预测的

prolog - 控制 Prolog 变量值选择

list - 从列表中删除重复项,同时保留最右边的出现

Prolog,在开始执行时写一些东西

prolog - Prolog计算谓词为真的次数

prolog - 递归谓词中的回溯

Prolog内存问题