2011-07-12 59 views
2

在下面的查询中,首先我得到X = H128,这是从哪里来的?此外为什么它返回是吗?是否因为变量X实际上没有定义,我们正在测试这种情况?Prolog查询返回H128

?- not(X==3). 
X = H128 
yes 

回答

6

您的查询使用的是无关变量(X)。 当检查X是否被实例化为术语3 it(X == 3)时,它会失败,因为X没有实例化。

因此,不是(X == 3)将成功,因为prolog引擎不能证明X == 3。 您的序言翻译因此返回'是'(由于否定是解释者的失败方法),并且X仍然没有实例化。

这就是为什么解释器显示X = H128,其中H128是一个虚假的未被证实的变量。

2

是的,这是因为变量X不受第一个目标not(X==3)的约束。实际上not/1 metapredicate永远不会产生绑定,即使它成功。那是因为not的成功意味着内心的失败。请注意0​​将失败,因为X=3可以成功,当X是空闲的(并且可以绑定到值3)。

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)被删除。