1
« en: Jueves 23 de Diciembre de 2004, 01:07 »
Hola, sigo aprendiendo prolog y queria saber como mostrar todos los resultados posibles. Estoy con un ejemplo de combinar un elemento en todas las posiciones de una lista pero sólo me muestra el primer resultado. Todavia no he llegado a la sección de cortes y fallos por lo que supongo que se podrá resolver sin ellos.
El ejemplo en cuestión es: insertart(L1,e,L2), por ej: insertart([1,2,3],a,L) y deberia ir mostrando:
L=[a,1,2,3]
L=[1,a,2,3]
L=[1,2,a,3]
L=[1,2,3,a]
Para resolverlo utilizo una lista auxiliar inicialmente vacia en la que iré concatenando con la cabeza de la lista para poder ir desplazando el elemento.
insertart(L,E,L2):- combinar(L,E,[],L2).
Para ir "moviendo" el elemento, voy concatenando quedando el resultado que quiero mostrar en L2 y así recursivamente hasta que L quede vacia. Algo como:
combinar([],E,L1,L2):- concatenar(L1,[E],L2).
combinar([X|Xs],E,L1,L2):- concatenar(L1,[E],Ltemp), concatenar(Ltemp,[X|Xs],L2), concatenar(L1,[X],L1temp),combinar(Xs,E,L1temp,L3).
Es decir, en este predicado -> concatenar(Ltemp,[X|Xs],L2) <- está el resultado que quiero mostrar (L2).
He seguido trazas y calcula bien las combinaciones pero a la hora de mostrar las listas, sólo muestra la primera, L=[a,1,2,3].
¿Cómo debo hacer para que muestre el resto? ¿Es necesario poner algun corte o fallo?
Muchas gracias.