为什么我不能像这样比较两个原子?

时间:2014-07-12 20:50:58

标签: prolog

所以基本上这里是我使用GNU-Prolog 1.4.4编写的一些Prolog代码。

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以一种意想不到的方式工作......

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

有人能给我一些帮助吗?

1 个答案:

答案 0 :(得分: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结合使用。 no您可以使用if-then-else结构:

( A == 2    -> B = yes
; otherwise -> B = no)