2014-07-12 62 views
0

所以基本上这里是我写的一些Prolog代码,使用GNU-Prolog 1.4.4。为什么我不能比较这样的两个原子?

A is 1, 
B = (A == 2), 
B == no. 


A is 2, 
B = (A == 2), 
B == no. 

我所预料到的是,当A为2,那么B == no回报no,当A为1,则B == no回报yes

然而,出乎我的意料,无论是两段代码返回no,这留给我的印象是B == no作品以意想不到的方式..

所以基本上我怎么能写我想要的方式的代码?

任何人都可以给我一些帮助吗?

+0

随着B =(A == 2)你边界表达式A == 2至B(总是如此)。这与评估A == 2是不同的。然后你问序言B是否等于'否',因此连词总是假的。我认为你必须检查绑定和自由变量的概念,以及谓词评估原则。 – Manolo

回答

4

线

B = (A == 2) 

不计算任何方式A==2和结果分配给B。它只是将术语B(变量)与术语(A==2)统一起来。统一的结果是B现在是A==2。您可以省略B==no检查自己:

?- A is 1, B=(A==2). 
A = 1, 
B = (1==2) ? 
yes 

如果你真的想要的是B与原子yes RESP统一。 no可以使用if-then-else结构:

(A == 2 -> B = yes 
; otherwise -> B = no) 
相关问题