2016-08-30 148 views
0

我知道我错过了一些非常简单的东西,但是这让我很困扰。 我想测试的Prolog将如何处理以下Prolog X = f(X)。 (X)

X=f(X). 
    X=Z:- X==Y,Y==Z. 
?- X==f(f(X)). 

但显然我错过了为什?-X = F(X)非常基本的。返回“false”。 请你指出我错在哪里。

谢谢!

+0

对于我来说,' - X = F(X).'在顶层成功,并回答'X = F (X).'当然,统一('=/2')和等价('==/2')不是一回事!你需要在你的问题上更清楚一点,你的问题是什么,你的咨询计划是什么,以及你想要达到的目标。 – 2016-08-31 04:04:23

回答

0

使用=/2的统一:

?- X = X. 
true. 

?- X = f(X). 
X = f(X). 

?- f(f(X)) = X. 
X = f(f(X)). 

?- X = Y, X = Z. 
X = Y, Y = Z. 

只要你有一个自由变量在统一的一面,它一定会成功。

等效与==/2不同。它只成功,如果两边都是相同的变量或相同的地值:

?- X == X. 
true. 

?- Y == Z. 
false. 

?- X = Y, X = Z, Y == Z. 
X = Y, Y = Z. 

?- X == 3. 
false. 

?- X = 3, X == 3. 
X = 3. 
+0

非常感谢! –

相关问题