Buscar

listaExerciciosPrologListas

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

% a. Inverter lista.
	concatenar([], L, L).
	concatenar([H|T], L, [H|D]) :- concatenar(T, L, D).
	inverte([], []).
	inverte([H|T], L) :- inverte(T, X), concatenar(X, [H], L).
% b. Último elemento de uma lista
	ultimo([Y], Y).
	ultimo([_|Xs], Y):- ultimo(Xs, Y).
% c. Eliminar primeira ocorrência de um elemento em uma lista.
	retirar_elemento(Elem, [Elem|Cauda], Cauda).
	retirar_elemento(Elem, [Elem1|Cauda], [Elem1|Cauda1]) :- 
	retirar_elemento(Elem, Cauda, Cauda1).
	% ?- retirar_elemento(X, [a,b,a,d,e,f], L).
% d. Eliminar todas as ocorrências de um elemento em uma lista.
	retirar_todas(_,[],[]).
	retirar_todas(Elem, [Elem|Cauda], L) :- retirar_todas(Elem,Cauda,L).
	retirar_todas(Elem, [Elem1|Cauda], [Elem1|Cauda1]) :-
		Elem \== Elem1, retirar_todas(Elem, Cauda, Cauda1).
	% ?- retirar_todas(X, [a,b,a,d,e,f], L).
% e. Elementos são consecutivos em uma lista.
	ordenada([X]).
	ordenada([X,Y|Z]) :- maior(Y,X), ordenada([Y|Z]).
	maior(Y,X) :- Y > X.
	% ?- ordenada([1,2]).
	% ?- ordenada([2,1]).
% f. Lista dos n primeiros elementos de uma lista
	seleciona([], _, []).
	seleciona([M|N], L, [X|Y]) :- enesimo(M, X, L),
	seleciona(N, L, Y).
	enesimo(1, X, [X|_]).
	enesimo(N, X, [_|Y]) :- enesimo(M, X, Y), N is M+1.
	% ?- seleciona([2,4], [a,d,f,g,h], L).
% g. Subconjunto de um conjunto.
	subconjunto(Sub, Lista) :- concatenar(L1,L2,Lista), concatenar(Sub,L3,L2).
	% ?- subconjunto(X, [a,c,b,d])
% h. Número é máximo elemento de uma lista.
	max([X],X). 	
	max([X|Y],M):- max(Y,N), (X>N -> M=X; M=N).
	% max([1,3,4], M).
% i. Interseção de conjuntos.
	intersecao([ ],_,[ ]).
	intersecao([X|L1],L2,[X|LI]):-membro(X,L2),!,intersecao(L1,L2,LI).
	intersecao([_|L1],L2, LI):- intersecao(L1,L2,LI).
	intersecao([ ],_,[ ]).
	intersecao([X|L1],L2,[X|LI]):-membro(X,L2),!,intersecao(L1,L2,LI).
	intersecao([_|L1],L2, LI):- intersecao(L1,L2,LI).
	membro(X,[X|_]).
	membro(X,[_|Y]) :- membro(X,Y).
	% ?- intersecao([a,d,c,f,g], [e,f,s,c,g], L).
% j. Interseção não vazia.
	% verificar se a Interseção de 2 conjuntos é não vazia
	nao_vazia(L1, L2) :- membro(Elem,L1), membro(Elem, L2).
	% ?- nao_vazia([2,5],[5,4])
	% ?- nao_vazia([2,5],[3,4])
% k. Lista contém os n primeiros elementos de uma lista.
	seleciona([], _, []).
	seleciona([M|N], L, [X|Y]) :- enesimo(M, X, L),
	seleciona(N, L, Y).
	enesimo(1, X, [X|_]).
	enesimo(N, X, [_|Y]) :- enesimo(M, X, Y), N is M+1.
	% ?- seleciona([2,4], [a,d,f,g,h], L).
% l. Lista é palíndromo.
	concatena([],L,L).
	concatena([X|L1],L2,[X|L3]):-concate(L1,L2,L3).
	reverso([],[]).
	reverso([H|T],X):-reverse(T,Y),concate(Y,[H],X).
	palindromo(X):-reverse(X,X).
	% ?- palindromo([a,c,a]).
% m. Troca primeira ocorrência de um elemento de uma lista por outro elemento dado.
	substitui(X,Y,[],[]).
	substitui(X,Y,[X|L], [Y|L1]) :- substitui(X,Y,L,L1).
	substitui(X,Y,[Z|L],[Z|L1]) :- X \== Z, substitui(X,Y,L,L1).
	% ?- substitui(2,1000,[0,4,2,6,90,2,2,88,2,6], L).
% n. Soma de dois vetores.
	somaVetorial([H], [R], P):- P is H + R, !.
	somaVetorial([H|T], [R|S], P):- somaVetorial([H],[R],M), somaVetorial(T,S,U), P is M + U.
	% ?- somaVetorial([3,4,5], [2,6,5], S).
% o. Produto escalar de dois vetores.
	prodVetorial([H], [R], P):- P is H * R, !.
	prodVetorial([H|T], [R|S], P):- prodVetorial([H],[R],M), prodVetorial(T,S,U), P is M + U.
	% ?- prodVetorial([3,4,5], [3,2,1], P)
% p. Eliminar último elemento de uma lista.
	elim_ult([A,B], [A]).
	elim_ult([Ca|Resto], [Ca|R]) :- elim_ult(Resto, R).
	% ?- elim_ult([a,v,b,f], B)
% q. Sequência de Fibonacci contendo n números.
	fib(0, 0).
	fib(1, 0) :- write('0').
	fib(X, Y) :- X > 1, write('0 1 '),X > 0, fib(X-1, Y, _).
	fib(1, 1, 0).
	fib(X, Y1, Y2) :- X > 1, X1 is X - 1, fib(X1, Y2, Y3), 
	Y1 is Y2 + Y3, write(Y1),write(' ').
	% ?- fib(8,F).
% r. Particiona uma lista em duas listas contendo respectivamente os números maiores ou iguais a um número dado e os números menores que este número.
	dividir(_,[],[],[]).
	dividir(M, [H|T], [H|U1],U2) :- H =< M, dividir(M,T,U1,U2).
	dividir(M,[H|T], U1, [H|U2]) :- H > M, dividir(M,T,U1,U2).
	% ?- dividir(5,[1,2,3,4,5,6,7,-1],L1,L2)
	
% s. Produto de duas matrizes na forma de duas listas de listas.
	%produto de matrizes pm(A,B,AB) - A, B, AB: lista de listas
	pm([],_,[]).
	pm([H|T],B,[L1|T1]) :- linha_prod(H,B,L1), pm(T,B,T1).
	linha_prod(L,M,LM) :- trnsp(M,Mt), lprod(L,Mt,LM).
	trnsp(A,AT) :- klis(A,[],AT). 
	klis([],L,L).
	klis([H|T],Li,L) :- klist(H,Li,M), klis(T,M,L).
	klist([],[],[]).
	klist(H,[],L) :- flat(H,L).
	klist([H|T],[H1|T1],[H2|T2]) :- inclui_fim(H,H1,H2), klist(T,T1,T2).
	lprod(_,[],[]).
	lprod(L,[H|T],[P|S]) :- detpesc(L,H,P), lprod(L,T,S).
	flat([],[]).
	flat([H|T],[[H]|S]) :- flat(T,S).
	inclui(X,L,[X|L]).
	inclui_fim(X,[],[X]).
	inclui_fim(X,[H|T],[H|R]) :- inclui_fim(X,T,R).
	detpesc([],[],0).
	detpesc([Hl|Tl],[Hv|Tv],C) :- detpesc(Tl,Tv,P), C is Hl*Hv+P.
	% ?- pm([[2,4],[3,5]], [[1,1],[1,1]], AB)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais