2011-10-12 131 views
2

我是新的prolog。 讓我告訴你下面是什麼,我想作爲註釋..如何從序列中的兩個列表創建一個原子對列表?

% ?-pair([1,2],[a,b],Result). 
% Result= [{1,a},{1,b},{2,a},{2,b}]. 

和我所做的是..

pair([],Q,[]). 
pair(P,[],[]). 
pair([A|P],[B|Q],[{A,B}|R]) :- pair([A|P],Q,R). 
pair([A|P],[B|Q],[{A,B}|R]) :- pair(P,[B|Q],R). 

與此代碼我達到這樣的結果是這樣的:

?- pair([1,2],[a,b],R). 
R = [{1, a}, {1, b}] ; 
R = [{1, a}, {1, b}, {2, b}] ; 
R = [{1, a}, {1, b}, {2, b}] ; 
R = [{1, a}, {2, a}, {2, b}] ; 
R = [{1, a}, {2, a}, {2, b}] ; 
R = [{1, a}, {2, a}] ; 
false. 

我希望所有在一行中不重複..

回答

1

可以通過在L2列出所有對甲在L1和B做一個收集所有對{A,B}在其他列表:

pair(L1, L2, Pairs):- 
    findall({A,B}, (member(A, L1), member(B, L2)), Pairs). 

?-pair([1,2],[a,b],Result). 
Result = [{1, a}, {1, b}, {2, a}, {2, b}]. 
4

你應該向Prolog解釋你wa nt(什麼是一對,如何構建它),然後要求Prolog找到所有的對。

相關問題