功能不在prolog中

时间:2016-11-02 07:33:56

标签: prolog

兄弟(X,Y): - 父亲(Z,X),父亲(Z,Y),不是(X = Y)。

妹妹(X,Y): - 父亲(Z,X),父亲(Z,Y),女性(X)。

兄弟(X,Y): - 父亲(Z,X),父亲(Z,Y),男性(X)。

enter image description here

我使用not功能有点问题。我没试过X = Y.但无济于事,兄弟姐妹的规则仍然会产生错误。

如果我要删除not x = y,输出会有点“难看”。 我应该怎么写not函数?

2 个答案:

答案 0 :(得分:1)

实施不可证明 ISO谓词称为(\+)/1

但是,正如@coder在评论中所解释的那样,使用dif/2来表达两个词不同好得多

dif/2是一个谓词,可以在所有方向上正常工作,如果它的参数尚未实例化的话。

例如,使用(\+)/1,我们得到:

?- \+ (X = Y ).
false.

不存在满足此目标的XY,对吗?的错误的

?- X = a, Y = b, \+ (X = Y ).
X = a,
Y = b.

相反,使用dif/2

?- dif(X, Y).
dif(X, Y).

特别是

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

有关详细信息,请参阅。自第一个Prolog系统以来dif/2与我们同在。我强烈建议你使用它。

答案 1 :(得分:0)

SWI Prolog 没有not运营商。它可以用作常规复合词,e.i。 not(X)

仿函数打开括号之间必须没有空格:

foo(参数列表)。

这是错误的原因。

SWI Prolog suggests ISO-standard replacement for not/1: (\+)/1