2

リストのリストで組み合わせを見つける必要があります。たとえば、次のリストを指定します。

リスト = [[1, 2], [1, 2, 3]]

これらは出力である必要があります。

櫛 = [[1,1]、[1,2]、[1,3]、[2,1]、[2,2]、[2,3]]

もう一つの例:

リスト = [[1,2]、[1,2]、[1,2,3]]

櫛 = [[1,1,1]、[1,1,2]、[1,1,3]、[1,2,1]、[1,2,2]、[1,2,3] ....等]

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

私はプロローグが初めてです、助けてください。

4

2 に答える 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 は、そのようなリストをすべて検索します。

于 2012-04-20T09:21:13.617 に答える
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).

定義answer(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、..]。どういたしまして。

于 2012-04-27T09:15:25.740 に答える