Operacion con listas prolog
Autores: RB, JJC, MNG, CEP
% GENERALIDADES % Determinar si lo que se recibe es una lista % Ejemplo: lista(1). % lista([1,2]).
No Yes
lista([]):-!. lista([_X|Y]):-lista(Y).
% Devuelve la longitud de la lista que se le pasa por argumento. % Ejemplo: long([1,3,7,4],X). X=4
long([],0):-!. long([_X|Y],S):-long(Y,T), S is T+1.
% Maximo elemento de una lista % Ejemplo: maximo([1,5,3,-2],X).
X=5
maximo([X],X). maximo([X|Xs],X):- maximo(Xs,Y), X >=Y. maximo([X|Xs],N):- maximo(Xs,N), N > X.
% Mínimo elemento de una lista % Ejemplo: minimo([1,5,3,-2],X). X=-2
minimo([X],X). minimo([X|Xs],X):- minimo(Xs,Y), X =< Y. minimo([X|Xs],N):- …ver más…
% Elimina los N ultimos elementos de una lista y devuelve el resto. % Ejemplo: sacaNult([1,2,3,4,5],2,L). L = [1,2,3]
sacaNult(L,N,R):-invertir(L,L1),sacaNpri(L1,N,R1),invertir(R1,R).
% Elimina el elemento X de la lista en el 1º nivel % Ejemplo: eliminaX([1,2,3,4,5],3,L). % eliminaX([1,2,[3,4],5,3],3,L). L=[1,2,4,5] L=[1,2,[3,4],5]
eliminaX([],_X,[]):-!. eliminaX([X|M],X,Z):- eliminaX(M,X,Z),!. eliminaX([R|M],X,[R|Z]):- eliminaX(M,X,Z),!.
% Elimina el elemento X de la lista en todos los niveles % Ejemplo: eliminaMx([1,2,[3,4],5,3],3,L). % eliminaMx([2,[3,4],5,3],4,L). L=[1,2,[4],5] L=[2,[3],5,3]
eliminaMx([],_X,[]):-!. eliminaMx([X],X,[]):-!. eliminaMx([X|M],X,S):-eliminaMx(M,X,S),!. eliminaMx([R|M],X,S):-lista(R),eliminaMx(R,X,T),eliminaMx(M,X,P),concatenar([T],P,S),!. eliminaMx([R|M],X,S):-eliminaMx(M,X,T),concatenar([R],T,S).
% Elimina todos los elementos de la lista 2 que estan en la 1 % Ejemplo: elim12([1,4,3,2,7,9],[2,1],L). L=[] % elim12([2,1],[1,4,3,2,7,9],L). L=[4,3,7,9] % elim12([1,4],[1,2,[4,6],5,3],L). L=[2,[6],5,3]
elim12([],L,L):-!. elim12([X|M],L,S):-eliminaMx(L,X,T),elim12(M,T,S).
% Elimina los elementos repetidos que estan en una lista, dejando el que primero ocurre % Ejemplo: eliminaR([2,[3,4],5,3],L). L=[2,[3,4],5] % eliminaR([2,[3,4],1,5,1,3],L). L=[2,[3,4],1,5]
eliminaR([],[]):-!. eliminaR([X|M],S):-not(lista(X)),eliminaX(M,X,T),eliminaR(T,Y),concatenar([X],Y,S). eliminaR([X|M],S):-lista(X),elim12(X,M,T),eliminaR(X,Y),