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)
并只挑选那些错误的。
现在这就是问题所在。当我查询类似的内容时,我想B=b
作为答案goal(a,B)
。在序言中是否可能。请注意,我不想像goal(c,b):-false
在序言中那样插入负面事实。
谢谢。
解决方案
试图从你的问题中猜测,说我们有:
p(a, 1).
p(c, 2).
p(d, 1).
p(e, 2).
并且您想查询第二个参数不是2 的所有 p/2,您可以执行以下操作:
?- p(X, Y), Y \== 2.
或者:
?- dif(Y, 2), p(X, Y).
阅读文档以了解有什么区别。这里有很多关于 SO 的问题都在讨论这个问题。
推荐阅读
- python - 将 Dataframe.describe 输出转换为一些 json
- dataframe - 如何在数据框选择中添加中间列?
- android - Android Espresso:由于随机 ViewNotFoundException 导致的不稳定测试
- c++ - 为什么直接 x 11 中我的程序没有输出?
- python - 如何模拟 micrologix Allen Bradley PLC?
- c# - 如何将列表视图中的 OberservableCollection 列表从 api 查询项复制到新的列表视图
- css - Flex Column Wrapping 和 Flex Basis 100% 额外空间
- date - 气流执行宏返回错误值
- c# - python函数可以在不同的按钮点击时调用吗?
- firebase - 代表用户创建 Firebase 帐户