2013-06-11 73 views
0

嗨,我在序言的新手,我有這樣的列表中刪除:(其實這是我的謂語的輸出不是列表)從列表中的所有人的Prolog

P = [1/1, 1/3] ; 
P = [1/1, 2/3] ; 
P = [1/3, 1/1] ; 
P = [1/3, 2/1] ; 
P = [2/1, 1/3] ; 
P = [2/1, 2/3] ; 
P = [2/3, 1/1] ; 
P = [2/3, 2/1] ; 

,我需要刪除dublicete條款。例如[1/1,2/3]和[2/3,1/1]是相同的,我應該刪除其中的一個,哪一個並不重要,我怎麼能在序言中做到這一點?在此先感謝

注意我瞭解到,這應該是這個好方法,但仍然不知道答案請幫助我。

回答

0

除非您真的向我們展示您的代碼,否則永遠不可能給出準確的答案。

我假設你有一個謂語f/1使得:

?- f(P). 

產生你上面顯示互動的結果。一個簡單的解決辦法是改變你的查詢:

?- f([X,Y]), X < Y. 

這將產生以下結果:

X = 1/3, Y = 1/1 ; 
X = 1/3, Y = 2/1 ; 
X = 2/3, Y = 1/1 ; 
X = 2/3, Y = 2/1 ; 

findall/3不足以解決這種特殊情況,因爲你已經在某種程度上定義的獨特性忽略列表中的位置。在Prolog(和其他所有內容)中,[X,Y]和[Y,X]不相等,所以你必須找到一個技巧來讓你獲得「獨特」的結果。