lists listing example prolog combinations

lists - prolog listing example



Combinatios en List of LIsts Prolog (2)

Necesito encontrar las combinaciones en una lista de listas. Por ejemplo, da la siguiente lista,

Lista = [[1, 2], [1, 2, 3]]

Estos deberían ser el resultado,

Comb = [[1,1,1], [1,2], [1,3], [2,1], [2,2], [2,3]]

Otro ejemplo:

Lista = [[1,2], [1,2], [1,2,3]]

Comb = [[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2], [1,2,3] .... etc]

Sé cómo hacerlo para obtener una lista con dos sublistas, pero debe funcionar para cualquier cantidad de sublistas.

Soy nuevo en Prolog, por favor ayuda.


try([],[]). try([L|Ls],[M|Ms]):- member(M,L), try(Ls,Ms). all(L,All) :- findall(M, try(L,M), All).

try devuelve una lista compuesta por elementos de las sublistas del primer argumento. todos encuentran todas esas listas.


Aquí está su respuesta, corta y seca, como un nuevo programador de prólogos nuevo.

%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).

Utilizando la respuesta de definición (InputList, OutputResult), donde, por ejemplo

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

y por ejemplo

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|...], [...|...]|...].

y así sucesivamente [X, Y, Z, ..] para cualquier cantidad de sublistas. De nada.