Operacion con listas prolog

Solo disponible en BuenasTareas
  • Páginas : 14 (3311 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de noviembre de 2010
Leer documento completo
Vista previa del texto
% BIBLIOTECA PROLOG - Versión 2.01 - 05/2005 % % CODIGO PARA OPERACIONES CON LISTAS

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):- minimo(Xs,N), N < X.
% Determina si una lista esestrictamente creciente % Ejemplo: crece([1,2,3]). Yes % crece([2,2,3]). No

crece([_X]). crece([X,Y|Z]):-XY,decrece([Y|Z]).
% Determina si dos listas son iguales en todos los niveles %E jemplo: listaIgual([1,2,[5,2],3],[[1,2,[5,2],3],9]). % listaIgual([1,2,[5,2],3],[1,2,[5,2],3]). No Yes

listaIgual([],[]):-!. listaIgual([X|M],[X|R]):-listaIgual(M,R).listaIgual([X|M],[T|R]):-lista(X),lista(T),listaIgual(X,T),listaIgual(M,R).
% Determina si una lista es capicua % Ejemplo: capicua([n,e,u,q,u,e,n]). % capicua([n,e,u,q,[u,e],n]). % capicua([n,e,[u,q,u],e,n]). Yes No Yes

capicua([]):-!. capicua(L):-invertir(L,R),listaIgual(L,R).
% Determina si la primer lista es prefijo de la segunda % Ejemplo: prefijo([1,2,3],[1,2,3,4,5]). % prefijo([1,5,3],[1,2,3,4,5]). Yes No

prefijo([],_M):-!.prefijo([_X],[_X|_M]):-!. prefijo([_X|L],[_X|M]):-prefijo(L,M).
1

% Determina si la primer lista es posfijo de la segunda. % Ejemplo: posfijo([3,5,4],[1,2,6,5,7,8,3,5,4]). % posfijo([3,5,4],[1,2,6,5,7,8,3,6,4]).

Yes No

posfijo(L,L1):-invertir(L,X),invertir(L1,Y),prefijo(X,Y).
% Determina si la primer lista es sublista de la segunda % Ejemplo: subLista([3,2],[1,6,2,3]). %subLista([3,2],[1,6,3,2]). No Yes

subLista([],_L):-!. subLista(L,[X|M]):-prefijo(L,[X|M]). subLista(L,[X|_M]):-lista(X),subLista(L,X). subLista(L,[_X|M]):-subLista(L,M).
% Determina si dos elementos son co nsecutivos % Ejemplo: consecutivo([1,3,4,6,5,7,1,2],6,5). % consecutivo([1,3,4,6,5,7,1,2],5,6). Yes No

consecutivo([_X,_Y|_Xs],_X,_Y). consecutivo([_X|Xs],N,Z):-consecutivo(Xs,N,Z).

% BUSQUEDA DEELEMENTOS % Obtener el primer elemento de la lista % Ejemplo: primerElem([3,2,4],X).

X=3

primerElem([_X|_Y],_X).
% Obtener el ultimo elemento de la lista % Ejemplo: ultimoElem([3,2,4],X). X=4

ultimoElem(L,S):-invertir(L,T),primerElem(T,S).
% Devuelve el enesimo elemento % Ejemplo: enesimoElem([1,4,3,2,5],2,X). X=4

enesimoElem([],_N,[]):-!. enesimoElem([_X|_Y],1,_X):-!.enesimoElem([_X|Y],N,E):-N1 is N - 1,enesimoElem(Y,N1,E).
% Devuelve una lista con el elemento que se encuentra en la enesima posicion % Ejemplo: nPosicion([1,4,2,3],2,X). X=[4] % nPosicion([1,4,2,3],8,X). X=[]

nPosicion([],_N,[]):-!. nPosicion([_X|_N],1,[_X]):-!. nPosicion([_X|R],N,S):-M is N-1,nPosicion(R,M,S).
% Devuelve el numero de posicion de la primera ocurrencia de X % Ejemplo:xPosicion(4,[7,2,1,8,3,6],X). X=0 % xPosicion(3,[7,2,1,3,4,3],X). X=4

xPosicion(X,L,S):-pertenece(X,L),!,xBusca(X,L,S). xPosicion(X,L,S):-not(pertenece(X,L)),S is 0. xBusca(_X,[],0):-!. xBusca(_X,[_X|_M],1):-!. xBusca(X,[_Y|M],S):-xBusca(X,M,T),S is T +1.
% Determina si un elemento X pertenece a la lista L (1 nivel) % Ejemplo: pertenece(1,[3,4,6,1,3]). Yes pertenece(1,[3,[4,6,1],3]). No

pertenece(_X,[_X|_Y]).pertenece(X,[_C|Y]):-pertenece(X,Y).
% Determina si un elemento X pertenece a la lista L (multinivel) % Ejemplo: perteneceM(1,[3,4,6,1,3]). Yes % perteneceM(1,[3,[4,6,1],3]). Yes

perteneceM(N,L):-listaAtomos(L,La),pertenece(N,La).
2

% ELIMINACION O REEMPLAZOS DE ELEMENTOS EN UNA LISTA

% Elimina los N primeros elementos de una lista y devuelve el resto % Ejemplo: sacaNpri([1,3,5,1,2],2,L)....
tracking img