Un poco de Teoría:
Una lista es una secuencia de elementos que pueden tener cualquier longitud, los elementos de una lista pueden ser cualquier tipo de terminos (constantes, variables o estructuras)
Composición, en la mayoría de lenguajes incluso en Prolog, una lista se compone de dos partes
a) Cabeza: la cabeza es el elemento inicial de una lista
b) Cola: el resto de elementos de la lista
Una lista es un caso especial de árbol.
ejemplo de lista
L=(1,2,3,4,5,[]), donde 1 es la cabeza y (2,3,4,5,[] ) es la cola.
L=(a,[]), este es el caso de que la lista tiene solo un elemento, pero también se le debe considerar que el elemento final de toda lista es el vació o también representado por [ ].
Una ves explicado algo de la teoría ahora vamos a la implementacion en el IDE SWI-Prolog
Implementacion:
- % Autor: Joel Fernandez Segura
- % Fecha: 29/04/2014
- %------------- Lista Vacia --------------------------
- es_lista_vacia(L):- L == [].
- es_lista_vacia([|]).
- %------------- listas Iguales -----------------------
- listas_iguales(X,Y):- X==Y.
- listas_iguales([A|Ca],[B|Cb]):- A==B,listas_iguales(Ca,Cb).
- %------------- Concatenar------------------------------
- concatenar([],L,L).
- concatenar([A|Ca],L2,[A|Cc]):- concatenar(Ca,L2,Cc).
- % --------------- miembro ----------------------------
- miembro(X,[X|_]).
- miembro(A,[_|Cb]):- miembro(A,Cb).
- % -----------------adyacentes(E1,E2,L) -----------------
- adyacentes(X,Y,[X,Y|_]):-!.
- adyacentes(X,Y,[_|L]):-adyacentes(X,Y,L).
- %---------------------- ultimo(E,L) --------------------
- ultimo(E,[E|[]]).
- ultimo(E,[_|Cl]):- ultimo(E,Cl).
- %----------------------- palindromo(L) -----------------
- palindromo(L):- reverse(L,L).
- % -------------------- longitud(N,l) --------------------
- longitud([],0).
- longitud([_|Cx],N):- longitud(Cx,N1), N is N1+1.
- % ------------------- prefijo(L,P) ---------------
- prefijo([],_):-!.
- prefijo([X],[X|_]):-!.
- prefijo([X|L],[X|M]):-prefijo(L,M).
- prefijo([X|T],[L|M]):-es_lista_vacia(X),prefijo(X,L),prefijo(T,M).
- %------------- sublista(L,S) -------------------------
- sublista([],_).
- sublista([A|B],K):- miembro(A,K), sublista(B,K).
- %--------------- maximo (L,M)- ----------------------
- maximo([X|Xs],M):-mayor(Xs,X,Y),Y==M.
- mayor([],M,M).
- mayor([Z|Zs],Aux,Menor):-Aux>Z,mayor(Zs,Aux,Menor).
- mayor([Z|Zs],Aux,Menor):-Z>Aux,mayor(Zs,Z,Menor).
- % -------- añadir por delante (L,E,R) -------------------
- añadir_por_delante([X|Xs],E,R):-concatenar([E],[X|Xs],R).
- %---------- añadir por detras(L,E,R) ------------------
- añadir_por_detras([],[E],[E]).
- añadir_por_detras([X|Xs],E,[X|Xz]):-concatenar(Xs,[E],Xz).
- %eliminar elemento(L,E,R) elimina todos los elementos iguales a 3
- elimina_elemento(_,[],[]).
- eliminar_elemento(X,[X|C],R):-!,eliminar_elemento(X,C,R).
- eliminar_elemento(X,[Y|Xs],[Y|Xa]):- eliminar_elemento(X,Xs,Xa).
- % ---------- eliminar_prim_aparicion(L,E,R) ---------------------
- eliminar_prim_aparicion([X|Xs],X,Xs).
- eliminar_prim_aparicion([Y|C1],E,[Y|C2]):-eliminar_prim_aparicion(C1,E,C2).
- % ------------------- duplicar_lista(L,LL) -----------------------
- %EJEMPL: duplicar_lista([1,2],LL). respta [1,2,1,2]
- duplicar_lista(L,Ll):-concatenar(L,L,Ll) .
- %-------------- duplicar_elementos(L,LL) ---------------------------
- duplicar_elementos([],[]).
- duplicar_elementos([X|Xs],[X,X|Xss]):-duplicar_elementos(Xs,Xss).
Espero les sirva y, cualquier duda, si alguna implementacion no sirve comuniquen para corregirlo, si necesitan mas códigos pueden pedirlo.
SOCIALIZA ESTO →