2017-03-07 68 views
1

顯然true = not(not(true))必須是錯誤的,因爲=試圖統一原子true與術語not(not(true))(沒有評估術語),這是錯誤的,因爲術語不相同。序言:爲什麼是真的==不是(不是(true)) - > false?

但是,我認爲==確實比較了任何評估。因此,我認爲true == not(not(true))應評估爲true == true,就像(算術運算符)4 =:= 2 + 2將評估爲4 =:= 4並返回true。

...但是這是我得到SWI-Prolog的:

?- true == not(not(true)). 
false. 

什麼我收到錯了嗎?

+2

您在其他地方使用過'not(not(false))'而'not(not(true))'。那是故意的嗎? – user2357112

+0

不,錯字。 Sry基因。修復。 – daniel451

回答

1

(==)/2不是比較什麼是評估。它不評估它的論點。它只有在參數已經被實例化爲匹配項時纔會成功。

在Prolog,not(not(true))是一種化合物的術語,其是術語not/1帶一個參數,not(true),本身是由具有不帶參數的術語true/0的一個參數的not/1的術語。它沒有價值。除了在某些情況下,它甚至不會被「執行」。在Prolog中,如果參數失敗,則謂詞not/1成功,如果參數成功,則謂詞失敗。這不是功能結果,而是一種行爲。這是假設它出現在上下文中,如以下:

not(not(true)), 
write('This will be written out because not(not(true)) succeeded'), nl. 

在Prolog中表達true == not(not(true))是一個化合物而言,等同於:

'=='(true, not(not(true))) 

在這方面,not(not(true))不評估。 Prolog將首先練習(==)/2等價運算符,如果它的參數被實例化爲相同的術語,則該運算符成功。 Prolog中的術語truenot(not(true))是否相同(或等同)?不,他們不是。一個是沒有參數的簡單術語(true/0)。另一個是複合術語:一個有一個參數的術語,它本身就是一個有一個參數的術語。因此(==)/2在這裏失敗。

請注意,(=:=)/2是完全不同的。它是一個運算符,用於比較算術表達式的結果。參數必須是可評估的算術表達式,如果它們評估的結果相同,則參數將成功,否則將失敗。

+0

相反'(==)/ 2' – false

+0

@false確實,我有點懶。 – lurker

+1

還是懶,我的意思是圍繞着括號,否則就是一個標記'== /' – false

相關問題