Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*NOTA: NUNCA DEIXAR COMENTÁRIO "GRUDADO NA HORIZOTAL" EM CÓDIGO*/
- % "codigo./*comentario*/" deu problema
- progenitor(hugo,hudson).
- progenitor(diva,hudson).
- progenitor(hugo,irmo).
- progenitor(diva,irmo).
- progenitor(hugo,irma).
- progenitor(diva,irma).
- progenitor(vop,hugo).
- progenitor(vohp,hugo).
- progenitor(vom,diva).
- progenitor(vohm,diva).
- progenitor(vop,tio).
- progenitor(vohp,tio).
- progenitor(vop,tia).
- progenitor(vohp,tia).
- homem(hugo).
- homem(hudson).
- homem(irmo).
- homem(vop).
- homem(vom).
- homem(tio).
- mulher(diva).
- mulher(irma).
- mulher(vohp).
- mulher(vohm).
- mulher(tia).
- pai(X,Y) :- progenitor(X,Y), homem(X).
- mae(X,Y) :- progenitor(X,Y), mulher(X).
- filho(X,Y) :- progenitor(Y,X), homem(X).
- filha(X,Y) :- progenitor(Y,X), mulher(X).
- irmao(X,Y) :- progenitor(A,Y), progenitor(A,X), homem(X), X \== Y.
- irma(X,Y) :- progenitor(A,Y), progenitor(A,X), mulher(X), X \== Y.
- avo(X,Y) :- progenitor(X,A), progenitor(A,Y), homem(X).
- avoh(X,Y) :- progenitor(X,A), progenitor(A,Y), mulher(X).
- descendente(X,Y) :- progenitor(Y,X).
- descendente(X,Y) :- progenitor(Y,F), progenitor(F,X).
- soma(X,X,X).
- soma(X,Y,S) :-
- X < Y,
- ProximoX is X+1,
- soma(ProximoX, Y, PS),
- S is PS+X.
- soma(X,Y,S) :- soma(Y,X,S).
- /*fatorial*/
- %fatorial(0,1).
- /*
- fatorial(N,R) :-
- N > 0,
- N1 is N-1,
- fatorial(N1,R1),
- R is N*R1.
- */
- /*grafos*/
- /*achando rotas*/
- ligado(a,b,5).
- ligado(b,c,10).
- rota(X,Y,C) :- ligado(X,Y,C).
- rota(X,Y,C) :-
- ligado(X,Z,C1),
- rota(Z,Y,C2),
- C is (C1 + C2).
- /*listas*/
- max([X],X).
- max([X,Y|Cauda],Max) :- X >= Y, !, max([X|Cauda],Max).
- max([_,Y|Cauda],Max) :- max([Y|Cauda],Max). /*para o caso de X<Y*/
- /*ou
- max([X],X).
- max([X,Y|Cauda],Max) :- max(Cauda,G), X >= G, Max is X.
- max([X,Y|Cauda],Max) :- max(Cauda,G), X < G, Max is G.
- */
- /*retirar uma ocorrencia de um elemento de uma lista*/
- retirar_elem(E,[E|L],L).
- retirar_elem(E,[E1|L],[E1|L1]) :- retirar_elem(E,L,L1).
- %retirar todas as ocorrencias de um elemento de uma lista
- %warning singleton variables: [Elem] ocorre quando a variável "Elem" é "inútil" (poderia ser substituida por "_")
- retirar_todas(_,[],[]).
- retirar_todas(Elem,[Elem|Cauda],L) :-
- retirar_todas(Elem,Cauda,L).
- /*EXERCÍCIOS*/
- %2
- separa([],[],[]).
- separa([X|Cauda],[X|P],N) :- X >= 0, separa(Cauda,P,N).
- separa([X|Cauda],P,[X|N]) :- X < 0, separa(Cauda,P,N).
- %3
- segundo([_, X|_], X).
- %4
- % iguais(X, X). %já funciona, mas para treinar a lógica é melhor a forma que foi feita.
- iguais([], []).
- iguais([X|Cauda1],[X|Cauda2]) :- iguais(Cauda1, Cauda2).
- %5
- duplica([],[]).
- duplica([X|Cauda], [X,X|Y]) :- duplica(Cauda, Y).
- %6
- ultimo([X], X).
- ultimo([_|Cauda], X) :- ultimo(Cauda, X).
- %7
- soma([X], X).
- soma([X|Cauda], R) :- soma(Cauda, Y), R is X + Y.
- %8
- fatorial(0, 1) :- !.
- fatorial(N, F) :- N > 0, M is N - 1, fatorial(M, F1), F is F1*N.
- %9
- contiguo([X,X|_]) :- !.
- contiguo([_|Cauda]) :- contiguo(Cauda).
- %10
- particiona([], [], []).
- particiona([X], [X|L1], L2) :- particiona([], L1, L2).
- particiona([X,Y|Cauda], [X|L1], [Y|L2]) :- particiona(Cauda, L1, L2).
- %11
- mdc(A,0,A) :- !.
- mdc(A, B, C) :- R is A mod B, mdc(B, R, C).
- %21
- % Alunos
- aluno(joao, calculo).
- aluno(maria, calculo).
- aluno(joel, programacao).
- aluno(joel, estrutura).
- % Estuda na...
- frequenta(joao, puc).
- frequenta(maria, puc).
- frequenta(joel, ufrj).
- % Professors
- professor(carlos, calculo).
- professor(ana_paula, estrutura).
- professor(pedro, programacao).
- % Funcionarios
- funcionario(pedro, ufrj).
- funcionario(ana_paula, puc).
- funcionario(carlos, puc).
- % Quem são os alunos do professor X?
- prof(X,R) :- professor(X,D), findall(Y, aluno(Y,D), R).
- % Quem são as pessoas que estão associadas a uma universidade X? (alunos e professores)
- universidade(X,Y) :- funcionario(Y,X); frequenta(Y,X).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement