Ejercicios de Programacion Logica
Enviado por Kuros • 27 de Mayo de 2019 • Tarea • 561 Palabras (3 Páginas) • 400 Visitas
member(X,[X|_]).
member(X,[_|Y]):-member(X,Y).
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
supt(X,[],[]).
supt(X,[X|L],L1):-supt(X,L,L1),!.
supt(X,[Y|L],[Y|Lr]):-supt(X,L,Lr),!.
lon([X],1).
lon([X|L],N):-lon(L,M),N is M+1.
encn([X|L],1,X).
encn([X|L],N,E):-M is N-1,encn(L,M,E).
maximo([X],X).
maximo([Y|L],X):-maximo(L,R),(Y>R,X is Y;X is R),!.
minimo([X],X).
minimo([Y|L],X):-minimo(L,R),(Y
repe([X,X|L]).
repe([X,Y|L]):-repe([X|L]).
verconj([X]).
verconj([X|L]):- not(repe([X|L])),verconj(L).
1.- Adicionar un elemento al frente de una lista.
add(X,L,[X|L]).
2.- Eliminar un elemento al frente de un a lista.
sup(X,[X|L],L).
3.-
Verificar si un elemento es el último de una lista.
verif(X,[X]).
verif(X,[Y|L]):-verif(X,L).
4.- Adicionar un elemento al final de una lista.
add1(X,[],[X]).
add1(X,L,[L|X]).
5.- Eliminar un elemento al final de una lista.
sup1(X,[X],[]).
sup1(X,[Y|L],[Y|L1]):-sup1(X,L,L1).
6.- Eliminar un elemento cualquiera de una lista.
sup2(X,[X|L],L).
sup2(X,[Y|L],[Y|L1]):-sup2(X,L,L1),!.
7.- Verificar si un elemento es el próximo de otro en una lista.
proximo(X,Y,[Y,X|_]).
proximo(X,Y,[Z|L]):-proximo(X,Y,L).
8.- Verificar si un elemento es el anterior de otro en una lista.
antes(X,Y,[X,Y|_]).
antes(X,Y,[Z|L]):-antes(X,Y,L).
9.- Verificar si un elemento es el próximo de otro en una lista (no necesariamente seguidos).
post(X,Y,[Y|L]):-member(X,L).
post(X,Y,[Z|L]):-post(X,Y,L).
10.- Verificar si un elemento es el anterior de otro en una lista (no necesariamente seguidos).
anterior(X,Y,L):-concatenar(L1,[Y|L2],L),member(X,L1).
11.- Eliminar de una lista un elemento X que se encuentre inmediatamente después de otro Y.
supseg(X,Y,L,Lr):-concatenar(L1,[Y,X|L2],L),concatenar(L1,[Y|L2],Lr).
12.- Eliminar de una lista un elemento X que se encuentre después de otro Y, no necesariamente seguidos.
elimdes(X,Y,L,L1):-concatenar(A,[Y|L2],L),sup2(X,L2,L3),concatenar(A,[Y|L3],L1).
13.- Eliminar de una lista todos los elementos X que se encuentren después de otro Y.
elimtdes(X,Y,L,Lr):-concatenar(A,[Y|L1],L),supt(X,L1,L2),concatenar(A,[Y|L2],Lr).
14.- Adicionar de una lista un elemento X que se encuentre inmediatamente después de otro Y.
addseg(X,Y,L,Lr):-concatenar(L1,[Y|L2],L),concatenar(L1,[Y,X|L2],Lr).
15.- Eliminar de una lista un elemento X que se encuentre inmediatamente antes de otro Y.
supant(X,Y,L,Lr):-concatenar(L1,[X,Y|L2],L),concatenar(L1,[Y|L2],Lr).
16.- Adicionar en una lista un elemento X que se encuentre inmediatamente antes de otro Y.
addant(X,Y,L,Lr):-concatenar(L1,[Y|L2],L),concatenar(L1,[X,Y|L2],Lr),!.
17.- Dividir una lista en 2 que no contengan un elemento dado, en donde las sublistas creadas sean las correspondientes derecha e izquierda de dicho elemento.
dividir(X,[],[],[]).
dividir(X,[X|L],[],L):-!.
dividir(X,[Y|Cola],[Y|L1],L2):-dividir(X,Cola,L1,L2),!.
18.- Concatenar 2 listas.
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
19.- Resolver el ejercicio 17 con concatenar.
divi(X,L,L1,L2):-concatenar(L1,[X|L2],L).
20.- Resolver el ejercicio 7 utilizando concatenar.
verifprox(X,Y,L):-concatenar(_,[Y,X|_],L).
21.- Resolver el predicado miembro utilizando concatenar.
miembro(X,L):-concatenar(_,[X|_],L).
22.- Usando concatenar resolver el ejercicio 3.
veriult(X,L):-concatenar(_,[X],L).
23.- Usando concatenar eliminar los 3 últimos elementos de una lista.
elim3(L,L1):-concatenar(L1,[_,_,_],L),!.
24.- Resolver el predicado miembro usando el predicado eliminar del ejercicio 6.
miem(X,L):-sup2(X,L,_).
25.- Adicionar un elemento a una lista en cualquier posición. Utilice el predicado eliminar del ejercicio 6.
adde(X,L,L1):-sup2(X,L1,L).
26.- Generar una permutación de los elementos de una lista. Utilice el predicado adicionar anterior.
permutar([X|L],L1):-adde(X,L,L1).
27.- Resolver el ejercicio anterior con el predicado eliminar del ejercicio 6.
permutar1([X|L],L1):-sup2(X,L1,L).
28.- Definir un predicado que determine si una lista tiene un número impar de términos.
impar([_]).
impar([_,_|L]):-impar(L).
29.- Definir un predicado que determine si una lista tiene un número par de términos.
par([]).
par([_,_|L]):-par(L).
30.- Invertir una lista.
inv([X,Y],[Y|[X]]).
inv([X|L],L1):-inv(L,L2),concatenar(L2,[X],L1),!.
31.- Verificar si una lista es sublista de otra.
subl1(L1,[L1,_]).
subl1(L1,[X|L]):-subl(L1,L).
32.- Verificar si una lista es sublista de otra.
subl(L1,L):-concatenar(L1,_,L).
subl(L1,[X|L]):-subl(L1,L).
33.- Definir un predicado que determine si una lista es simétrica.
simetric(L,L1):-inv(L,L2),L1 == L2.
34.- Definir un predicado que rote a la izquierda cíclicamente una lista.
riz(L,L1):-concatenar([X],L2,L),concatenar(L2,[X],L1),!.
35.- Definir un predicado que rote a la derecha cíclicamente una lista.
rde(L,L1):-concatenar(L2,[X],L),concatenar([X],L2,L1),!.
36.- Definir un predicado que rote n veces a la izquierda cíclicamente una lista.
rin(1,L,L1):-riz(L,L1).
rin(N,L,L1):-N>1,M is N-1,rin(M,L,L2),riz(L2,L1).
37.- Definir un predicado que rote n veces a la derecha cíclicamente una lista.
rdn(1,L,L1):-rde(L,L1).
rdn(N,L,L1):-N>1,M is N-1,rdn(M,L,L2),rde(L2,L1).
38.- Si existen predefinidos un conjunto de hechos sig(N,S), donde N es un número entero y S es un átomo, defina un procedimiento que traduzca una lista de enteros en sus correspondientes símbolos.
sig(0,cero).
sig(1,uno).
sig(2,dos).
sig(3,tres).
sig(4,cuatro).
sig(5,cinco).
sig(6,seis).
sig(7,siete).
sig(8,ocho).
sig(9,nueve).
traducir([X],[Y]):-sig(X,Y).
traducir([X|L],[Y|Lr]):-traducir(L,Lr),sig(X,Y).
39.- Definir un predicado que divida una lista en 2 de iguales longitudes.
divide1([X],[],[X]).
divide1(L,L1,L2):-lon(L,N),M is N//2, encn(L,M+1,E), concatenar(L1,[E|L3],L), concatenar([E],L3,L2),!.
40.- Definir un predicado que divida una lista en 2 de iguales longitudes.
divide2([X],[X],[]).
divide2(L,L1,L2):-(lon(L,N),N mod 2 =:=0,M is N//2, encn(L,M+1,E), concatenar(L1,[E|L3],L), concatenar([E],L3,L2),!);(lon(L,N),M is N//2, encn(L,M+2,E), concatenar(L1,[E|L3],L), concatenar([E],L3,L2),!).
41.- Definir el máximo y el mínimo de una lista.
maxmin([X],X,X).
maxmin(L,M,N):-maximo(L,M),minimo(L,N).
43.- Dadas dos listas LA=[A1...An] LB=[B1...Bn], obtener:
P=Sumatoria Ai * B(n-i+1).
44.- Definir un predicado que adicione un elemento a la lista si esta representa un conjunto (o sea los elementos no se repiten y no tienen un orden dado).
adcon(X,[],[X]).
adcon(X,L,Lr):-verconj(L),add(X,L,Lr),not(repe(Lr)).
45.- Verificar si 2 conjuntos son iguales.
ig([],[]).
ig([X|L1],L2):-verconj([X|L1]),verconj(L2),sup2(X,L2,L3),ig(L1,L3).
...