2014-07-12 91 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) 
相關問題