在下面的查询中,首先我得到X = H128
,这是从哪里来的?此外为什么它返回是吗?是否因为变量X
实际上没有定义,我们正在测试这种情况?Prolog查询返回H128
?- not(X==3).
X = H128
yes
在下面的查询中,首先我得到X = H128
,这是从哪里来的?此外为什么它返回是吗?是否因为变量X
实际上没有定义,我们正在测试这种情况?Prolog查询返回H128
?- not(X==3).
X = H128
yes
您的查询使用的是无关变量(X)。 当检查X是否被实例化为术语3 it(X == 3)时,它会失败,因为X没有实例化。
因此,不是(X == 3)将成功,因为prolog引擎不能证明X == 3。 您的序言翻译因此返回'是'(由于否定是解释者的失败方法),并且X仍然没有实例化。
这就是为什么解释器显示X = H128,其中H128是一个虚假的未被证实的变量。
是的,这是因为变量X
不受第一个目标not(X==3)
的约束。实际上not/1
metapredicate永远不会产生绑定,即使它成功。那是因为not
的成功意味着内心的失败。请注意0将失败,因为X=3
可以成功,当X
是空闲的(并且可以绑定到值3)。
你的初衷是什么?这可能是因为你想声明X
不等于3.对于不平等大部分Prolog系统提供dif/2
:
?- dif(X,3).
dif(X,3).
在此查询中,我们要求值X
这不等于3,那么,哪值不平等?实际上,相当多:想到1
,2
,术语3+3
,c
,列表[2,3,4]
等等。所以给出一个具体的答案,如X = 4
将排除许多其他有效的答案。但是,这里的答案是:所有X
的查询都不等于3.实际评估因此推迟到稍后。这不成立 -
?- dif(X,3), X = 3.
false.
在这里,我们的情况下X
拿到了价值3得到。
?- dif(X,3), X = 4.
X = 4.
在这里,具体的有效值被接受,并restriciton dif(4,3)
被删除。