2014-12-02 80 views
-1

我已經編寫了以下程序來計算列表中的所有成員對。這裏是我的代碼:如何修改下列Prolog程序

select_pair(X, Y, [X|[Y|T]], T). 
select_pair(X, Y, [Head|[X|[Y|T]]], [Head|Rest]) :- select_pair(X, Y, T, Rest). 

我應該打電話給我的代碼只有這3名成員組成的列表:

select pair(X, Y, [1,2,3], Zs). 

但這並不產生所有可能的組合。它只產生

X = 1, Y = 2, Zs = [3] 

並且它應該產生這一點,但它並不:所以

X = 1, Y = 2, Zs = [3] ; 
X = 1, Y = 3, Zs = [2] ; 
X = 2, Y = 1, Zs = [3] ; 
X = 2, Y = 3, Zs = [1] ; 
X = 3, Y = 1, Zs = [2] ; 
X = 3, Y = 2, Zs = [3] 

,我怎麼能修改此代碼來生成所有可能的對的列表中的成員[1 ,2,3]?

回答

2

我會使用過程select/3

select_pair(X, Y, List, Rest):- 
    select(X, List, MList), 
    select(Y, MList, Rest). 

的第一選擇會從列表中刪除第一個元素爲X,把在MList列表的其餘部分。

然後第二個選擇會讓你第二個元素和其餘。

+0

非常好。別介意我的前言。評論。我剛看到你如何修改select/3。奇蹟般有效。謝謝 – 2014-12-02 14:13:41