列表中的组合Prolog

时间:2012-04-20 02:59:49

标签: prolog combinations

我需要在列表列表中找到组合。 例如,给出以下列表,

列表= [[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 个答案:

答案 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,..]。不客气。