Ir al contenido principal

Prolog - Ejemplos de Listas

Comparto el material de estudio antes de un Examen de Prolog.

  • % insertar un entero al inicio de la lista
insertarInicio(X,L,[X|L]).
  • % Insertar un elemento al final de una lista
insertarFinal(X,[],[X]).
insertarFinal(X,[L|Ls],[L|R]):-insertarFinal(X,Ls,R).
  • % Insertar un entero en una lista de enteros indicandole la posicion
insertar(E,[X|Xs],1,L):- L=[E,X|Xs],write("Fin"),nl,!.
insertar(E,[X|Xs],P,L):- N1=P-1,write(N1),nl,insertar(E,Xs,N1,L1),L=[X|L1].
  • % Buscar un elemento en una lista
pertenece(X,[X|_]):-!.
pertenece(X,[_|Xs]):-pertenece(X,Xs).
  • % Eliminar un elemento de una lista
eliminar(X,[X|Xs],Xs):-!.
eliminar(X,[Y|Ys],[Y|Lr]):-eliminar(X,Ys,Lr).
  • % Eliminar ocurrencias de un elemento en una lista
eliminarOcurrencias(_,[],[]):-!.
eliminarOcurrencias(X,[X|Xs],Ys):- eliminarOcurrencias(X,Xs,Ys),!.
eliminarOcurrencias(X,[Y|Ys],[Y|Lr]):-eliminarOcurrencias(X,Ys,Lr).
  • % Determina si todos los elementos de una lista son iguales
iguales([]).
iguales([_]):-!.
iguales([X,X|Xs]):-iguales([X|Xs]).
  • % Concatenar 2 listas
concatenar(L,[],L).
concatenar(L,[X|Xs],R):-insertarFinal(X,L,L2), concatenar(L2,Xs,R).
  • % Retornar enesimo elemento de una lista
% lista, posicion, elemento
enesimo([X|_],1,X).
enesimo([_|Xs],N,E):-N1 = N-1, enesimo(Xs,N1,E).
% Eliminar los elementos de una lista que estan en las posiciones dadas
% por los elementos de otra lista de enteros
% ListaElemen, PosActual, Lista posic, ListaRes
eliminarUnaPos([],_,_,[]).
eliminarUnaPos([_|Hs],P,Lp,Lr):- pertenece(P,Lp), P1 = P+1, eliminarUnaPos(Hs,P1,Lp,Lr),!.
eliminarUnaPos([H|Hs],P,Lp,[H|Lr]):- P1 = P+1, eliminarUnaPos(Hs,P1,Lp,Lr).
eliminarElemenLista(Le,Lp,Lr):-eliminarUnaPos(Le,5,Lp,Lr).
  • % Unir dos listas en el sentido de Conjuntos
% Lista A, Lista B, Union A,B
unirListas(L1,[],L1).
unirListas(L1,[X|Xs],R):- not(pertenece(X,L1)), unirListas([X|L1],Xs,R),!.
unirListas(L1,[_|Xs],R):- unirListas(L1,Xs,R).
  • % Diferencia de dos listas en el sentido de conjuntos
% Lista A, Lista B, Diferencia A-B
diferenciaListas([],_,[]).
diferenciaListas([X|Xs],L,[X|Lr]):-not(pertenece(X,L)),diferenciaListas(Xs,L,Lr),!.
diferenciaListas([_|Xs],L,Lr):-diferenciaListas(Xs,L,Lr).
  • %Invertir una lista
invertir2([],L,L).
invertir2([X|Xs],L,Lf):-L1=[X|L], invertir2(Xs,L1,Lf).
invertir2(L,Lf):-invertir2(L,[],Lf).

Codigo testeado en swi-prolog y Visual Prolog

Comentarios

  1. Excelente aporte. Muchas gracias!

    ResponderEliminar
  2. Falta es una buena explicacion de cada uno xD.. pero se agradece el aporte

    ResponderEliminar
  3. no sale la respuesta les falta explicar mejor

    ResponderEliminar

Publicar un comentario