prolog - not found、dif 和 \+ 之间的关系
问题描述
false
从概念上讲,dif
和之间的关系是什么\+
。
鉴于此程序:
likes(john, mary).
执行查询时到底要问什么:
\+ like(john, A).
为什么答案不是:
dif(A, mary).
越想越觉得自己不明白Prolog中否定的意思。
解决方案
\+ like(john, A)
A
(如果后面的变量\+
在调用时未绑定,则这是一个格式错误的查询:floundering)
\+
是按程序定义的运算符:
- 证明右边的查询
\+
- 如果成功则失败。
换句话说,“如果你找不到证据,就假设它是假的”也就是。“默认否定”。在关系数据库中采取的一种态度。它基本上可以替代 Prolog 没有强烈否定陈述的问题,但结果证明它是逻辑哲学家甚至没有更早提出的一个受欢迎的扩展。
dif(A, mary).
更简单:“确保在计算的这个分支A
上mary
不要统一”。设置了一个约束mary
,它将导致统一和A
失败,如果A
已经绑定则立即mary
或稍后。与遇到该语句时不统一的A \= mary
状态比较,A
因此根本不是真正的“逻辑语句”。mary
推荐阅读
- cassandra - 使用两个数据中心和 LOCAL_QUORUM 写入 Cassandra 时的同步延迟
- c++ - 回到八皇后。我想不通。(我错过了哪一部分?)
- robotframework - 如何从日历机器人框架中选择未来一天的日期
- python - 回归建模中的 int vs Float
- angular - vis.js 时间轴中不存在集群选项
- c++ - 在字符串 C++ 中查找第一个不为零的数字
- mysql - 如何合并 2 个单元格以在空列单元格中生成新值/文本?
- python - 使用 Python 和容器上安装的 AWS CLI 启动 Kubernetes 作业?
- python - 使用 XAMPP 服务器运行 python 文件只返回包含程序的文件夹,而不是运行程序
- ajax - 为什么我的 PrimeFaces 的控件在迁移后不起作用?