Vous êtes sur la page 1sur 4

Laboratorio 6

EJERCICIOS PROPUESTOS LISTAS


1.Hallar la longitud de una lista (es decir, el nmero de elementos que contiene).
domains
l1=integer*
num=integer
predicates
nondeterm lista(l1)
nondeterm pasar(l1,num)
nondeterm cantidad
clauses
lista([10,5,7,1,3,67,1]).
cantidad:-lista([_|C]),pasar(C,1).
pasar([],N):-write(N).
pasar(C,N):-C=[_|Y],N1=N+1,pasar(Y,N1).
goal
cantidad.
2.Contar el nmero de veces que un elemento se encuentra repetido en una lista.
3. Escribir un programa en prolog que calcule la suma del primer y ltimo elemento
de una lista que contiene nmeros.
domains
l1=integer*
num=integer
predicates
nondeterm invertir(l1,l1)
nondeterm concatenar(l1,l1,l1)
nondeterm suma(l1,num)
clauses
concatenar([],A,A).
concatenar([A|B],X,[A|C]):-concatenar(B,X,C).
invertir([A],[A]).
invertir([A|B],C):-invertir(B,D), concatenar(D,[A],C).
suma([X|Y],B):-G=[X|Y],write(G),nl,
A1=X,invertir(Y,[Q|_]),A2=Q,B=A1+A2.
goal
suma([10,5,04,7,8,6],SUMA).
4 Escribir un programa en prolog que calcule la suma de los N PRIMEROS elementos
de una lista que contiene nmeros.
5 Escriba un programa en prolog que devuelva el primer elemento de una lista y e
l ultimo elemento de una lista.
domains
l1=integer*
num=integer
predicates
nondeterm invertir(l1,l1)

nondeterm concatenar(l1,l1,l1)
nondeterm inifin(l1,num,num)
clauses
concatenar([],A,A).
concatenar([A|B],X,[A|C]):-concatenar(B,X,C).
invertir([A],[A]).
invertir([A|B],C):-invertir(B,D), concatenar(D,[A],C).
inifin([X|Y],B,C):-G=[X|Y],write(G),nl,B=X,invertir(Y,[Q|_]),C=Q.
goal
inifin([10,5,04,7,8,6],INICIO,FIN).
6 Aadir un elemento en una lista por la parte final. add2(5,[a,b,c,d],NL). NL->[a
,b,c,d,5]
domains
l1=integer*
predicates
nondeterm concatenar(l1,l1,l1)
clauses
concatenar([],A,A).
concatenar([A|B],X,[A|C]):-concatenar(B,X,C).
goal
concatenar([5,4,7,565],[3,5,8],X).
7 Eliminar el ltimo elemento de una lista.
domains
l1=integer*
predicates
nondeterm invertir(l1,l1)
nondeterm concatenar(l1,l1,l1)
nondeterm eliminar(l1,l1)
clauses
concatenar([],A,A).
concatenar([A|B],X,[A|C]):-concatenar(B,X,C).
invertir([A],[A]).
invertir([A|B],C):-invertir(B,D), concatenar(D,[A],C).
eliminar(Z,X):-invertir(Z,A),A=[_|W],invertir(W,X).
goal
eliminar([10,5,04,7,8,6],X).
8 Elaborar un programa en PROLOG que genera una lista de N nmeros positivos.
domains
i=integer
predicates
10 Dada una lista de nmeros, escribir los predicados PROLOG necesarios para halla
r el elemento mnimo y el mximo.

Ejemplo: minimo([4,6,2,7,9,0],Min). % PROLOG respondera Min=0 Ejemplo: ma


ximo([4,6,2,7,9,0],Max). % PROLOG respondera Max=9
domains
numero = integer
listanumeros = numero *
predicates
list_min(numero,listanumeros).
list_min2(numero,numero,listanumeros).
clauses
list_min(M, [X|Xs]):list_min2(M, X, Xs).
list_min2(M, M, []):- !.
list_min2(X, Y, [Z|Zs]):Z <= Y,
!,
list_min2(X, Z, Zs).
list_min2(X, Y, [Z|Zs]):Z >= Y,
list_min2(X, Y, Zs).
goal
list_min(M,[0,1,2,3,5,7,-2,-3,-4]).
domains
numero = integer
listanumeros = numero *
predicates
list_max(numero,listanumeros).
list_max2(numero,numero,listanumeros).
clauses
list_max(M, [X|Xs]):list_max2(M, X, Xs).
list_max2(M, M, []):- !.
list_max2(X, Y, [Z|Zs]):Z >= Y,
!,
list_max2(X, Z, Zs).
list_max2(X, Y, [Z|Zs]):Z <= Y,
list_max2(X, Y, Zs).
goal
list_max(M,[0,1,2,3,5,7,-2,-3,-4]).
11 Escribir un predicado PROLOG para que dada una lista de nmeros, construya dos
listas, una de nmeros positivos y otra de negativos y que determine la cardinalid
ad de ambas listas.
Ejemplos: - pos_y_neg([3,-1,9,0,-3,-5,-8],3,[3,9,0],4,[-1,-3,-5,-8]). %
PROLOG respondera s. -pos_y_neg([3,-1,9,0,-3,-5,-8],Npos,Pos,Nneg,Neg). /* PROLOG
respondera: Npos=3, Pos=[3,9,0], Nneg=4, Neg=[-1,-3,-5,-8] */
domains
numero = integer
listanumeros = numero *
predicates

nondeterm pos_y_neg(listanumeros,listanumeros,listanumeros).
clauses
pos_y_neg([A],[B],[C]).
pos_y_neg([N|RL1],[N|RL2],L3) :N >= 0, !,
pos_y_neg(RL1,RL2,L3).
pos_y_neg([N|RL1],L2,[N|RL3]) :% N < 0,
pos_y_neg(RL1,L2,RL3).
goal
pos_y_neg([3,-1,9,0,-3,-5,-8],Pos,Neg).
12 Escribir un programa en prolog que lea una secuencia de 10 nmeros como mximo y
los almacene en una estructura de tipo lista. El programa debe devolver la lista
inversa.
v = { 8, 4, 2, 6, 0, 1, 7, 6, 6, 5 }
v-1 = { 5, 6, 6, 7, 1, 0, 6, 2, 4, 8 }
domains
nro=integer
lista=nro*
predicates
nondeterm ingreso(nro,lista)
nondeterm leer
clauses
ingreso(0,[]).
ingreso(N,L):-N1=N-1, ingreso(N1,L1),
write("Ingrese Numero= "), readint(E), L=[E|L1].
leer:-write("Ingrese Cantidad Nmeros= "),readint(N),11>N, ingreso(N,L),
write("Lista ","\n",L),nl.
goal
leer.

Vous aimerez peut-être aussi