prolog - Prolog 中的逻辑 'not' 是什么?

标签 prolog prolog-dif

我面临的问题有点微不足道。
我想在 Prolog 中不使用逻辑,但似乎 not/1不是我想要的东西:

course(ai).
course(pl).
course(os).

have(X,Y) :- course(X),course(Y),not(X = Y).

我查询:
have(X,Y), write(X-Y), nl , fail.

我没有得到我想要的结果:(

最佳答案

代替 not(X = Y)你需要写 \+ X = YX \= Y .但考虑使用 dif(X,Y)反而。 dif/2存在于 B、SWI、YAP、SICStus。要查看差异:

?- X = b, dif(a, X).
X = b.

?- X = b, \+ a = X.
X = b.

所以到目前为止一切似乎都很好。但是,如果我们只是
交换两个目标的顺序?
?- \+ a = X, X = b.
false.

?- dif(a, X), X = b.
X = b.
(\+)/1现在给了我们一个不同的结果,因为有一个答案
a = X ,目标\+ a = X将失败。
(\+)/1因此不是否定,但意味着此时不可证明
及时。

A safe approximationdif/2在 ISO Prolog 中也是可能的。

关于prolog - Prolog 中的逻辑 'not' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523608/

相关文章:

prolog - Prolog中的[]和[_]是什么意思

prolog - 初学者 - 添加 3 和 5 的倍数

prolog - Prolog CLPFD 中的整数列表和无限循环

list - 字符串列表的最长公共(public)前缀 (LCP)

list - 删除 Prolog 列表中的前导零

inheritance - 在序言中定义 is_a 谓词?

prolog - X\=Y 和 dif(X,Y) 的区别

prolog - 从列表中删除所有出现的元素

prolog - 将 Prolog 仿函数转换为具有差异列表的仿函数