Prolog - Mostrar todas las salidas en Prolog

 
Vista:

Mostrar todas las salidas en Prolog

Publicado por msi_ (4 intervenciones) el 22/12/2004 23:47:32
Hola, estoy 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([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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mostrar todas las salidas en Prolog

Publicado por jsx (2 intervenciones) el 31/12/2004 19:42:32
Bien, despues de cada respuesta no le des al intro directament, aprieta \" ; \" (sin las comillas) + intro. Esto te dara la siguiente respuesta, en tu caso tendras que hacerlo 4 veces.
Es aconsejable hacerlo asi, pero si te da pereza puedes introducir directament en el interprete del prolog esto:
?- interactive(no).
esto te mostrara todas las soluciones posibles! Si tienes pocas es util, pero me quedo con los \" ; \".

Sobre el programa que has hecho...mmmm...cada cual lo hace a su manera pero creo que lo lias bastante. Aprovecha el trabajo hecho y utiliza un predicado predefinido como el select.
El select es un predicado de este tipo:

select(ListaInicial,Elemento,Resto_lista)
?- select([1,2,3],1,RL).

RL=[2,3];

no

?-select([1,2,3],X,Y).

X=1,
Y=[2,3];

X=2,
Y=[1,3];

X=3,
Y=[1,2];

no

entonces la cosa quedara asi:

insertar(Lista,Elemento,LE):-select(LE,Elemento,Lista).

venga, a10
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar todas las salidas en Prolog

Publicado por msi_ (4 intervenciones) el 19/01/2005 11:45:54
Hola, aunque tarde queria agradecerte la ayuda prestada. Gracias a tus comentarios conseguí solucionar el problema ya que mi predicado permuta era un poco complicado y con tus consejos he visto que es mas simple de lo que parecia.

Un saludo.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar