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.