Skip to content

Instantly share code, notes, and snippets.

@MarcusAdriano
Created May 2, 2018 03:03
Show Gist options
  • Save MarcusAdriano/39dac465031476511ec77636c00dd270 to your computer and use it in GitHub Desktop.
Save MarcusAdriano/39dac465031476511ec77636c00dd270 to your computer and use it in GitHub Desktop.
%SOMA
%O número que somado antessessor da
%soma de um com dois que produz como
%resultado três.
%
%sum(s(0),s(s(0)),s(Z)),sum(Z,X,s(s(s(0)))).
sum(X,0,X).
sum(X, s(Y), s(Z)) :- sum(X, Y, Z).
%defina um predicado recursivo para calcular
%o produto de dois números natureais usando
%apenas soma e subtração
produto(X,0,0):- X >= 0,!.
produto(X,1,X):- X >= 0,!.
produto(X,Y,Z):- X >= 0,
Y >= 0,
Y1 is Y - 1,
produto(X,Y1,Z1),
Z is X + Z1,!.
% O grafo a seguir representa um mapa,
% cujas cidades são representadas
%por letras e cujas estradas (de sentido
%único) são representados por nú-
%meros, que indicam sua extensão em km
%Usando o predicado estrada(Origem,
%Destino,Km), crie um programa
%para representar esse mapa.
%Defina a relação transitiva
%dist(A,B,D), que determina a distância
%D entre duas cidades A e B.
estrada(a, b, 25).
estrada(a, d, 23).
estrada(b, c, 19).
estrada(b, e, 32).
estrada(c, d, 14).
estrada(c, f, 28).
estrada(e, f, 26).
estrada(d, f, 30).
distancia(X,Y,Z) :- estrada(X,Y,Z), !.
distancia(X,W,Z) :- estrada(X,Y,Z1),
distancia(Y,W,Z2),
Z is Z1 + Z2.
%listas
%concatenar
concatena([],X,X).
concatena([H|T], L, [H|T1]):-concatena(T,L,T1).
%Prefix de uma lista
%[1,2,3,4] = [], [1], [1, 2], [1, 2, 3], [1, 2, 3, 4]
prefixa(L,X):-concatena(X,_,L).
%infixa de uma lista
%[1,2,3,4] = [], [4], [3, 4], [2, 3, 4], [1, 2, 3, 4]
%Escreva um programa que inverta uma lista de elementos.
inverter(L,X) :- inverte(L,[],X).
inverte([H|T],A,X) :- inverte(T,[H|A],X).
inverte([],A,A).
%Escreva um programa denominado limpa (X, L1, L2) que
%produz uma lista L2 como sendo a lista L1 sem nenhuma ocorrência do termo X.
limpa(_,[],[]).
limpa(X,[H|T],L) :- X == H, limpa(X, T, L), !.
limpa(X,[H|T],[H1|T1]) :- X =\= H, H1 = H, limpa(X, T, T1), !.
%MAIOR ELEMENTO DE UMA LISTA QUALQUER NUMÉRICA
maior([],X,X).
maior([H|T],A,X) :- A>=H, maior(T,A,X), !.
maior([H|T],A,X) :- A<H, maior(T,H,X), !.
%Verificar qual "número" é maior
maiorQue(s(_), 0).
maiorQue(s(X),s(Y)) :- maiorQue(X,Y).
%FATORIAL DE UM NÚMERO USANDO RECURSÃO POR CAUDA
fatorial(0,1).
fatorial(X,Y):-Z is X - 1, fatorial(Z, W), Y is X * W, !.
%A palindrome is a word or phrase that
%spells the same forwards and backwards.
%For example, ‘rotator’, ‘eve’, and ‘nurses
% run’ are all palindromes. Write a
% predicate palindrome(List) , which
% checks whether List is a palindrome.
% For example, to the queries
palindrome(L):-inverter(L,X),L=X.
infixa(A,X):-inverter(A,X1),prefixa(X1,X2),inverter(X2,X).
simetrica(L):-inverter(L,X),L=X.
d(1,um).
d(2,dois).
d(3,tres).
d(4,quatro).
d(5,cinco).
d(6,seis).
d(7,sete).
d(8,oito).
d(9,nove).
d(0,zero).
converte([H|T],[Y|T1]):-d(H,Y),converte(T,T1).
converte([],[]).
estrada2(1,a,b).
estrada2(2,a,d).
estrada2(3,b,c).
estrada2(4,c,d).
estrada2(5,b,e).
estrada2(6,c,f).
estrada2(7,d,f).
estrada2(8,e,f).
rota(X,Y,[H]):-estrada2(H,X,Y).
rota(X,Y,[H|T]):-estrada2(H,X,W),rota(W,Y,T).
progenitor(maria,joao).
progenitor(jose,joao).
progenitor(maria,ana).
progenitor(jose,ana).
progenitor(joao,mario).
progenitor(ana,helena).
progenitor(ana,joana).
progenitor(helena,carlos).
progenitor(mario,carlos).
sexo(ana,feminino).
sexo(maria,feminino).
sexo(joana,feminino).
sexo(helena,feminino).
sexo(mario,masculino).
sexo(joao,masculino).
sexo(jose,masculino).
sexo(carlos,masculino).
irma(X,Y):- progenitor(A,X),progenitor(A,Y),X\==Y,sexo(X,feminino).
irmao(X,Y):- progenitor(A,X), progenitor(A,Y),X\==Y, sexo(X,masculino).
descendente(X,Y):- progenitor(X,Y).
descendente(X,Y):- progenitor(X,A),descendente(A,Y).
avo(X,Y):- progenitor(X,A),progenitor(A,Y),sexo(X,masculino).
mae(X,Y):- progenitor(X,Y),sexo(X,feminino).
pai(X,Y):- progenitor(X,Y),sexo(X,masculino).
tio(X,Y):- irmao(X,A),progenitor(A,Y).
primo(X,Y):-irmao(A,B),progenitor(A,X),progenitor(B,Y),X\==Y.
primo(X,Y):-irma(A,B),progenitor(A,X),progenitor(B,Y),X\==Y.
media(L,X):-media(L,0,0,X).
media([H|T],M,N,X):-Y is N + 1,G is M + H, media(T,G,Y,X).
media([],M,N,X):-X is M / N.
maximo([H|T],X):-maximo(T,H,X).
maximo([H|T],A,X):-H >= A,maximo(T,H,X),!.
maximo([H|T],A,X):-H < A,maximo(T,A,X),!.
maximo([],A,A).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment