Вы находитесь на странице: 1из 3

EJERCICIOS RESUELTOS 1.- Calcular la inversa de una lista. Ejemplo de utilizacin: inversa([a,b,c,d],[d,c,b,a]). %PROLOG devolvera s. Solucin 1: inversa([],[]).

inversa([X|L1],L):inversa(L1,Resto), concatenar(Resto,[X],L). Solucin 2: inversa(L1,L):- inversa (L1,[],L). inversa([],L,L). inversa([X|L1],L2,L3):- inversa(L1,[X|L2],L3). 2.- Par consecutivo en una lista Define el predicado "par_en_lista(L1,L2)" donde L1 es una lista de dos elementos que aparecen de forma consecutiva en la lista L2. Ejemplos ?- par_en_lista(L,[1,2,3,4]). L = [1, 2] ; L = [2, 3] ; L = [3, 4] ; No Solucin: par_en_lista([],[]). par_en_lista([],[_]). par_en_lista([X,Y],L):conc(L1,_L2,L), conc(_L3,[X,Y],L1). 3.- Define la relacin rota(L1,L2)de forma que la lista L2 sea la lista L1 en la que el primer elemento se ha situado en la ltima posicin. Usa la relacin "conc" ya definida. Ejemplos ?- rota([a,b,c,d],L). L = [b, c, d, a] Yes ?- rota(L,[b,c,d,a]). L = [a, b, c, d] Yes Solucin: rota([],[]). rota([X|L1],L2):conc(L1,[X],L2). 4.- Define la relacin n_esimo(N,L,X)de forma que X sea el N-simo elemento de la lista L. Ejemplos

?- n_esimo(2,[a,b,c,d],X). X=b Yes SOLUCION: longitud([],0). longitud([_|L],N):longitud(L,N1), N is N1+1. n_esimo(1,[Y|_],Y). n_esimo(N,[Y|L],X):EJERCICIOS PROPUESTOS 1.- Borrar algunos elementos de una lista. Por ejemplo: considera la lista L1=[a,b,c,d,z,z,e,z,z,z,f,g] y borra todos los elementos que siguen a la secuencia z,z,z. ?-L1=[a,b,c,d,z,z,e,z,z,z,f,g], conc(L2,[z,z,z|_],L1). 2.- Borrar los tres ltimos elementos de una lista. ?-L1=[a,b,c,d,z,z,e,z,z,z,f,g], conc(L,[X,Y,Z],L1). 3.- Definir la relacin para extraer el ltimo elemento de la lista 3.1) Utilizando la definicin de concatenacin. ultimo(Elem,Lista):- conc(_,[Elem],Lista). 3.2) Sin utilizarla. ultimo(Elem,[Elem]). ultimo(Elem,[_|Lista]):- ultimo(Elem,Lista). 4.- Definir dos predicados: par(Lista), impar(Lista) que sern verdaderos si Lista tiene un nmero par e impar de elementos, respectivamente. Solucin l: par([]). par([X|Resto]):impar(Resto). impar([_]). impar([X|Resto]):par(Resto). Solucin 2: par([]). par([X,Y|Resto]):- par(Resto). impar([X]). impar([X,Y|Resto]):- impar(Resto)

5.- Calcular las permutaciones de una lista. Ejemplo: ?- permutacion([a,b,c,],P). P=[a,b,c]; P=[a,c,b]; P=[b,a,c]; Solucin l: permutacion([],[]). permutacion([X|Cola],L):permutacion(Cola,L1), insertar(X,L1,L). Solucin 2: permutacion2([],[]). permutacion2(L,[X|P1):borrar(X,L,L1), permutacion2(L1,P). Solucin 3: permutacion3(Lista,[Cabeza|Cola]):conc(V,[Cabeza|U],Lista), conc(V,U,W), permutacion3(W,Cola). permutacion3([],[]). Solucin 4: permutacion4([],[]). permutacion4(Lista,[Cabeza|Cola]):permutacion4(W,Cola), conc(V,U,W), conc(V,[Cabeza|U],Lista). Solucin 5: permutacion5([],[]). permutacion5([X|L1],[X|L2]):- permutacion5(L1,L2). permutacion5([X|L1],[Y|L2]):borrar(Y,L1,L3), permutacion5([X|L3],L2).