我面临的问题有点微不足道。
我想在 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 = Y
或 X \= 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 approximation的
dif/2
在 ISO Prolog 中也是可能的。
关于prolog - Prolog 中的逻辑 'not' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523608/