(==)/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中的術語true
和not(not(true))
是否相同(或等同)?不,他們不是。一個是沒有參數的簡單術語(true/0
)。另一個是複合術語:一個有一個參數的術語,它本身就是一個有一個參數的術語。因此(==)/2
在這裏失敗。
請注意,(=:=)/2
是完全不同的。它是一個運算符,用於比較算術表達式的結果。參數必須是可評估的算術表達式,如果它們評估的結果相同,則參數將成功,否則將失敗。
您在其他地方使用過'not(not(false))'而'not(not(true))'。那是故意的嗎? – user2357112
不,錯字。 Sry基因。修復。 – daniel451