2013-11-15 57 views
5

我使用SICStus序言,並有一組事實:序言:不平等操作

student('John Henry', 'Maths'). 
student('Jim Henry', 'Maths'). 
student('John Alan', 'Maths'). 
student('Alan Smith', 'Computing'). 
student('Gary Henry', 'Maths'). 

我想兩個學生其中兩個學生是不同的共同話題,所以我就:

sharedSubject(S1, S2, Sub) :- S1 \== S2, student(S1, Sub), student(S2, Sub). 

然而,當我進入:

sharedSubject('John Henry', F, E).      

我得到F = 'John Henry'。有人能指出我要出錯的地方以及我需要做什麼嗎?謝謝。

+0

這兩個很好的答案。由於解釋,我選擇了Paulo的一個。我之前沒有考慮過實例化。 – Hydar77

回答

5

必須在S1 \== S2目標移動到結束的。如果你打電話給你sharedSubject/3謂詞的第二個參數在sharedSubject('John Henry', F, E)不實例,如,在S1 \== S2目標永遠是正確的:

?- 'John Henry' \== S2. 
true. 

另外:

?- S1 \== S2. 
true. 

見內置標準(\==)/2的文檔在您的Prolog系統文檔中使用謂詞。簡而言之,除非要測試兩個變量是否相同,否則在調用此術語時請確保這兩個參數都被實例化。等於謂詞。