我需要在列表列表中找到组合。 例如,给出以下列表,
列表= [[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] ....等]我知道如何为包含两个子列表的列表执行此操作,但它需要适用于任意数量的子列表。
我是初学者,请帮助。
答案 0 :(得分:2)
try([],[]).
try([L|Ls],[M|Ms]):-
member(M,L),
try(Ls,Ms).
all(L,All) :- findall(M, try(L,M), All).
尝试返回一个由第一个参数的子列表元素组成的列表。都找到了所有这些清单。
答案 1 :(得分:0)
这是你的答案,切割和干燥,作为一个新的prolog程序员我自己。
%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,..]。不客气。