首页 > 解决方案 > not found、dif 和 \+ 之间的关系

问题描述

false从概念上讲,dif和之间的关系是什么\+

鉴于此程序:

likes(john, mary).

执行查询时到底要问什么:

\+ like(john, A).

为什么答案不是:

dif(A, mary).

越想越觉得自己不明白Prolog中否定的意思。

标签: prolog

解决方案


\+ like(john, A)

A(如果后面的变量\+在调用时未绑定,则这是一个格式错误的查询:floundering

\+是按程序定义的运算符:

  • 证明右边的查询\+
  • 如果成功则失败。

换句话说,“如果你找不到证据,就假设它是假的”也就是。“默认否定”。在关系数据库中采取的一种态度。它基本上可以替代 Prolog 没有强烈否定陈述的问题,但结果证明它是逻辑哲学家甚至没有更早提出的一个受欢迎的扩展。

dif(A, mary).

更简单:“确保在计算的这个分支Amary不要统一”。设置了一个约束mary,它将导致统一和A失败,如果A已经绑定则立即mary或稍后。与遇到该语句时不统一的A \= mary状态比较,A因此根本不是真正的“逻辑语句”。mary

我收集了一些关于否定作为失败和需要返工的dif/2的注释。还是有用的。


推荐阅读