prolog: 79 ejemplos resueltos y comprobados
lista([]):-!.
lista([X|Y]):-lista(Y).
/*------------------------------------------------------------------*/
/*2-Concatena dos listas*/
concatenar([],L,L).
concatenar([X|M],L,[X|Z]):-concatenar(M,L,Z).
/*------------------------------------------------------------------*/
/*3-Invierte la lista que recibe en el primer nivel*/invertir([X],[X]).
invertir([X|M],Z):-invertir(M,S), concatenar(S,[X],Z).
/*------------------------------------------------------------------*/
/*4-Calcula la longitud de la lista*/
long([],0):-!.
long([X|Y],S):-long(Y,T),!, S is T + 1.
/*------------------------------------------------------------------*/
/*5-Suma los elementos de la lista*/
suma_elem([X],X):-!.suma_elem([X|Y],S):-suma_elem(Y,T), S is T + X.
/*------------------------------------------------------------------*/
/*6-Devuelve el elemento que se encuentra en la enesima posicion*/
posicion_n([],N,[]):-!.
posicion_n([X|N],1,X):-!.
posicion_n([X|R],N,S):-M is N - 1,posicion_n(R,M,S).
/*------------------------------------------------------------------*/
/*7-Dan como resultado el primer y el ultimoelemento de la lista*/
primer_elem([X|Y],X):-!.
ultimo_elem(L,S):-invertir(L,T),primer_elem(T,S).
/*------------------------------------------------------------------*/
/*8-Calcula la primer posicion donde aparece el elemento X en la lista*/
prim_pos(X,[],0):-!.
prim_pos(X,[X|M],1):-!.
prim_pos(X,[Y|M],S):-prim_pos(X,M,T),S is T + 1./*------------------------------------------------------------------*/
/*9-Elimina el elemento x de la lista en todos los niveles*/
elimina_x([],X,[]):-!.
elimina_x([X],X,[]):-!.
elimina_x([X|M],X,S):-elimina_x(M,X,S),!.
elimina_x([R|M],X,S):-lista(R), elimina_x(R,X,T), elimina_x(M,X,P), concatenar([T],P,S).
elimina_x([R|M],X,S):-elimina_x(M,X,T), concatenar([R],T,S)./*------------------------------------------------------------------*/
/*10-Invierte una lista en todos sus niveles*/
invertir_tot([],[]):-!.
invertir_tot([X|M],S):-lista(X),invertir_tot(X,P),invertir_tot(M,T),concatenar(T,[P],S).
invertir_tot([X|M],S):-invertir_tot(M,T),concatenar(T,[X],S),!.
/*------------------------------------------------------------------*/
/*11-Saca los n primeros elementos de una lista y devuelve el resto*/sac_n_pri([],N,[]):-!.
sac_n_pri([X|M],1,M):-!.
sac_n_pri([X|M],N,S):-N1 is N-1,sac_n_pri(M,N1,S).
/*------------------------------------------------------------------*/
/*12-Da como resultado los n primeros elementos de una lista*/
da_n_pri(L,0,[]):-!.
da_n_pri([],N,[]):-!.
da_n_pri([X|M],1,[X]):-!.
da_n_pri([X|M],N,S):-N1 is N - 1,da_n_pri(M,N1,T),concatenar([X],T,S)./*------------------------------------------------------------------*/
/*13-Muestra los ultimos n elementos de la lista*/
da_n_ultim(L,N,S):-invertir_tot(L,T),da_n_pri(T,N,R),invertir_tot(R,S).
/*------------------------------------------------------------------*/
/*14-Determina si dos listas son iguales en todos los niveles*/
lista_igual([],[]):-!.
lista_igual([X|M],[X|R]):-lista_igual(M,R).lista_igual([X|M],[T|R]):-lista(X), lista(T), lista_igual(X,T),lista_igual(M,R).
/*------------------------------------------------------------------*/
/*15-Determina si la primer lista es prefijo de la segunda*/
prefijo([],M):-!.
prefijo([X],[X|M]):-!.
prefijo([X|L],[X|M]):-prefijo(L,M).
prefijo([X|T],[L|M]):-lista(X),prefijo(X,L),prefijo(T,M)./*------------------------------------------------------------------*/
/*16-Determina si la primer lista es sublista de la segunda*/
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).
/*------------------------------------------------------------------*/
/*17-Elimina todos los elementos de la lista 1 que est n en la 2*/
elim_l1_de_l2([],L,L):-!....
Regístrate para leer el documento completo.