Sunteți pe pagina 1din 6

Ejercicios de procesamiento de Listas

Ejercicio 1: Analice la ejecucin de los siguientes cdigos de Prolog


A) domains
lista= integer*
num=integer

predicates
es_lista(lista)
longitud(lista,num)
buscar(lista,num)

clauses
es_lista([]).
es_lista([_|X]):- es_lista(X).

longitud([],0).
longitud([_|C],N):-longitud(C,N1),N=N1+1.

buscar([],Elem):- write("no ta"),nl.
buscar([X|Y],Elem):-X=Elem,!, write("si ta"),nl.
buscar([X|Y],Elem):-buscar(Y,Elem).

goal
%es_lista([1,2,2]).
%longitud([1,2,3,4,5,6],N).
buscar([1,2,3,4,5,6],9).

B) domains
lista = integer*
elemento= integer

predicates
listar
impri_lista(lista)
busca(elemento,lista)
leer(elemento,lista)
asteriscos(lista)
pon(elemento)

clauses
listar:- write("cuantos elementos: "),
readint(N),
leer(N,L),
impri_lista(L),
asteriscos(L),
write("Elementos a buscar en la lista: "),
readint(X),
busca(X,L).

impri_lista([]).
impri_lista([A|R]):-write(A),write(" "), impri_lista(R),nl.

leer (0,[]).
leer(N,[A|L]):-readint(A), Z = N-1, leer (Z,L).

busca(X,[]):-write("No esta !"),nl.
busca(X,[X|R]):- write ("Si esta !"), nl.
busca (X,[Y|R]):-busca (X,R).

asteriscos([]):-!.
asteriscos([A|R]):-pon (A), nl, asteriscos(R).

pon(0).
pon(X):-write("*"), Z = X-1, pon(Z).

goal
listar.

C) domains
fila=integer*
matriz= fila*

predicates
sumafila(fila, fila, fila)
sumar(matriz, matriz, matriz)

clauses
/*Predicado para calcular la suma de los elementos de una fila */
sumafila([],[],[]):-!.
sumafila([], L2, L2):-!.
sumafila(L1, [], L1):-!.
sumafila([C1|Cola1], [C2|Cola2], Res):- S=C1+C2,
sumafila(Cola1, Cola2, ColaRes),
Res=[S|ColaRes].

/*Predicado de recorrido de las filas para sumar los elementos mediante el uso del
predicado anterior */
sumar([],[],[]):-!.
sumar([], L2, L2):-!.
sumar(L1,[], L1):-!.
sumar([C1|Cola1], [C2|Cola2], LR):-sumafila(C1, C2, Res),
sumar(Cola1, Cola2, ColaRes),
LR=[Res|ColaRes].

goal
sumar([[1,2,3],[2,2,2],[4,4,4]],[[1,1,1],[2,1,2],[1,2,3]],R).


D) domains
lista=integer*

predicates
dividir(lista,lista,lista)

clauses
dividir ([],[],[]):-write("lista procesada"),nl.
dividir([L|R],[L|N],P):- T = L mod 2, C = abs(T), C>0, dividir (R,N,P).
dividir([L|R],N,[L|P]):- W = L mod 2, E = abs(W), E=0, dividir (R,N,P).

goal
dividir([2,7,3,33,22,4,6,11],N,P).

Ejercicio 2: Genere los rboles de deduccin para cada una de las operaciones que se
realizan sobre elementos de una lista, en el siguiente programa. Ejecute el programa para
analizar los resultados obtenidos.
domains
lista=integer*

predicates
es_lista(lista)
conc(lista,lista,lista)
par_en_lista(lista,lista)
rota(lista,lista)
inversa(lista,lista)
borrado(integer,lista,lista)
insertado(integer,lista,lista)
permutacion_1(lista,lista)
permutacion_2(lista,lista)
longitud(lista,integer)
n_esimo(integer,lista,integer)

clauses
es_lista([]).
es_lista([_|X]):-es_lista(X).

conc([],L,L).
%:-nl,write("Lista: ",L),readchar(Resp),nl.
conc([X|L1],L2,[X|L3]):- conc(L1,L2,L3).
%write("Lista1: ",L1,"\t"), write ("Lista2: ",L2,"\t"),
write ("ListaR:",L3),readchar(Resp),nl.

rota([],[]).
rota([X|L1],L2):-conc(L1,[X],L2).


par_en_lista([],[]).
par_en_lista([],[_]).
par_en_lista([X,Y],L):-conc(L1,_L2,L), conc(_L3,[X,Y],L1).

inversa([],[]).
inversa([X|L1],L2):-inversa(L1,L3),conc(L3,[X],L2).

borrado(X,L1,L2):-conc(L5,L4,L1),conc(L3,[X],L5),conc(L3,L4,L2).

insertado(X,L2,L1):-conc(L3,L4,L2),conc(L3,[X],L5),conc(L5,L4,L1).

permutacion_1([],[]).
permutacion_1([X|L1],L2):-permutacion_1(L1,L3),insertado(X,L3,L2).

permutacion_2([],[]).
permutacion_2(L1,[X|L2]) :- borrado(X,L1,L3), permutacion_2(L3,L2).

longitud([],0).
longitud([_|L],N):-write (L),nl, longitud(L,N1),N = N1+1,
write (N1),nl.

n_esimo(1,[Y|_],Y).
n_esimo(N,[Y|L],X):-longitud([Y|L],N1),
N < N1+1,N > 1,
N2 = N-1,n_esimo(N2,L,X).

goal
%es_lista(2).
%conc([1,2,5],[3,4],L).
%par_en_lista(L,[1,2,3,4]).
%rota([1,8,7,4],L).
%rota(L,[1,8,7,4]).
%inversa([1,8,9,0],L).
%borrado(1,[1,2,3],L).
%borrado(X,[1,2,3],[2,3]).
%insertado(5,[1,7],L).
%permutacion_1([1,2],L).
%permutacion_2([1,2,3],L).
%longitud([1,3,5,7,8,9,0],N).
n_esimo(2,[1,7,9,2,6,7,6,1],X).






Ejercicio 3 Escriba un programa en Prolog que permita:
Generar una lista de nmeros enteros, este procedimiento deber solicitar un valor
e introducirlo en una estructura tipo lista.
Generar un procedimiento que sume los elementos de la lista formada en el punto
anterior.
Procedimiento que obtenga el nmero ms alto y el nmero ms bajo contenido en
la lista.
Procedimiento que ordene los nmeros ascendente o descendentemente segn
peticin del usuario.

Ejercicio 4
La siguiente tabla presenta una lista de caractersticas de gemas comunes, incluyendo su
dureza (resistencia a fuerzas externas de acuerdo con la escala de Mosh), densidad
(peso por unidad de volumen en gramos por centmetro cbico) y colores.
Dado tres hechos que representan la dureza la densidad y el color de una gema escriba
las reglas necesarias para determinar:
1. El tipo de gema cuyas caractersticas se proporcionaron.
2. Solicitar las propiedades de una piedra X.
3. Solicitar la variedad de colores de una piedra X.
4. Solicitar los rangos de dureza de X piedra.
5. Solicitar las densidades de X piedra.
Las propiedades a comprobar se introducirn por medio de instrucciones readint,
readchar o readln, adems de colocar tanto los rangos de densidad, dureza y colores en
listas y manipular estas para obtener los resultados esperados.

PIEDRAS PRECIOSAS
GEMA DUREZA DENSIDAD COLORES
Diamante 10 3.52 Amarillo, caf, verde, azul, blanco, sin color

Corindn 9 4 Rojo, rosa, amarillo, caf, verde, azul, violeta,
negro, blanco, sin color

Quirsoberilo 8.5 3.72 Amarillo, caf, verde.

Espinel 8 3.6 Rojo, rosa, amarillo, caf, verde, azul, violeta,
blanco, sin color

Topacio 8 3.52 3.56 Rojo, rosa, amarillo, caf, azul, violeta, blanco,
sin color



Berilo 7.5 8-0 2.7 Rojo, rosa, amarillo, caf, verde, azul, blanco, sin
color

Zirconio 6 7.5 4.7 Amarillo, caf, verde, violeta, blanco, sin color

Cuarzo 7 2.65 Rojo, rosa, verde, azul, violeta, blanco, negro, sin
color

Turmalina 7 3.1 Rojo, rosa, amarillo, caf, verde, azul, blanco,
negro, sin color

Peridoto 6.5 7 3.3 Amarillo, caf, verde

Jadeta 6.5 7 3.3 Rojo, rosa, amarillo, caf, verde, azul, violeta,
blanco, negro, sin color

Opalina 5.5 6.5 2 2.2 Rojo, rosa, amarillo, caf, blanco, negro, sin color

Nefrita 5 6 2.9 3.4 Verde, blanco, negro, sin color

Turquesa 5 6 2.7 Azul

S-ar putea să vă placă și