Baixe o app para aproveitar ainda mais
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)
Compartilhar