2012-04-20 11 views
2

リストのリストで組み合わせを見つける必要があります。 は、例えば、以下のリストを与える、Combinatios List of LIsts Prolog

一覧= [1、2]、[1、2、3]

これらなければならない出力、

コーム= [1,1 ]、[1,2]、[1,3]、[2,1]、[2,2]、[2,3]

別の例:

一覧= [1,2 ]、[1,2]、[1,2,3]]

Comb = [[1,1,1]、[1,1,2]、[1,1,3] 2,1]、[1,2,2]、[1,2、 3] ....など]

私は2つのサブリストを持つリストのためにそれを行う方法を知っていますが、それは任意の数のサブリストに対して機能する必要があります。

私はプロローグをお薦めしています。どうぞよろしくお願いします。

答えて

2
try([],[]). 
try([L|Ls],[M|Ms]):- 
    member(M,L), 
    try(Ls,Ms). 

all(L,All) :- findall(M, try(L,M), All).  

tryは、最初の引数のサブリストの要素で構成される1つのリストを返します。 allはすべてのそのようなリストを見つけます。

0

これはあなた自身の仲間であるプロローグプログラマーとしてのあなたの答えです。

%elementInList(input list, output answer) 
answer(ListOfList, AnswerInList) :- 
    findall(Ans, combList(ListOfList, Ans), AnswerInList). 

%combList(ListOfList, Comb) :- 
combList([], []). 

combList([Head|Tail], Comb) :- 
    combList(Tail, [Element|Tempcomb]), 
    elementInList(Head, Element). 

%elementInList(List, Element) 
elementInList([Head|_], Head). 

elementInList([Head|Tail], Element) :- 
    elementInList(Tail, Element). 

定義の回答(InputList、OutputResult)を使用します。

answer([[1,2],[7,8]],Comb). 
Comb = [[1, 7], [2, 7], [1, 8], [2, 8]]. 

answer([[1,2],[2,8],[3,6,9]],Comb). 
Comb = [[1, 2, 3], [2, 2, 3], [1, 8, 3], [2, 8, 3], [1, 2, 6], [2, 2, 6], [1, 8|...], [2|...], [...|...]|...]. 

など[X、Y、Z、..]任意の数のサブリストに対してです。どういたしまして。

関連する問題