差異

2013-05-15 29 views
3

是什麼這之間的區別:差異

X \= Y 

和這段代碼:

dif(X, Y) 

我認爲他們應該做的相同,但他們不相同。這裏的例子:

n_puta(L, N, X) :- nputa(L, N, 0, X). 
nputa([], N, C, _) :- N = C. 
nputa([G|R], N, C, X) :- G = X, nputa(R, N, Y, X), C is Y - 1. 
nputa([G|R], N, C, X) :- dif(G,X), nputa(R, N, C, X). 

這裏有一些電話:

?- n_puta([a,a,b,b,b], 2, X). 
X = a ; 
false. 

?- n_puta([a,a,b,a,b,b], 3, X). 
X = a ; 
X = b ; 
false. 

X應該是如果我G \= X取代dif(G, X)出現恰好n次列表L.原子,我不獲得預期的結果。有人能告訴我這兩個操作員有什麼區別嗎?我可以使用除dif(G, X)之外的其他任何內容嗎?

本示例在SWI-Prolog中正常工作,但在Amzi中不起作用!序言。

+3

我有一個類似的問題,有很多有用的答案:http://stackoverflow.com/questions/13757261/using-or-dif?rq=1 – 2013-05-15 08:49:38

回答

3

dif/2(\=)/2只要他們的論據是基礎相同。但只有dif/2是一個純粹的關係,也可以正確地與變量一起工作,並且可以在所有方向上使用。你的例子清楚地表明你應該在這種情況下使用dif/2,因爲你使用謂詞不僅要測試,而且要生成解決方案。最廣泛使用的Prolog系統全都提供dif/2