Skip to content

Instantly share code, notes, and snippets.

@tonussi
Last active December 26, 2015 10:09
Show Gist options
  • Select an option

  • Save tonussi/7135241 to your computer and use it in GitHub Desktop.

Select an option

Save tonussi/7135241 to your computer and use it in GitHub Desktop.
animais
classe('mamifero') :- patas(1),glmamarias(1),pelo(1),nadadeiras(2),branquias(2),oviparo(2),asa(2).
assertClasse('mamifero') :- assert(patas(1)),assert(glmamarias(1)),assert(pelo(1)),assert(nadadeiras(2)),assert(branquias(2)),assert(oviparo(2)),assert(asa(2)).
animal('cachorro', 'mamifero').
classe(anonimous) :- patas(2),glmamarias(2),pelo(2),nadadeiras(2),branquias(2),oviparo(2),asa(2).
assertClasse(anonimous) :- assert(patas(2)),assert(glmamarias(2)),assert(pelo(2)),assert(nadadeiras(2)),assert(branquias(2)),assert(oviparo(2)),assert(asa(2)).
animal(chinforimpula, anonimous).
animal(churros, anonimous).
animal(cavalo, mamifero).
classe(maluco) :- patas(2),glmamarias(2),pelo(1),nadadeiras(1),branquias(1),oviparo(1),asa(1).
/**
Interface e Controle do Sistema
**/
start :-
write('-----------------------------------------------------'),nl,
write('Trabalho final de Prolog'),nl,
write('Alunos: Bruno Imhof - 06232094'),nl,
write(' Cesar Barone - 06232084'),nl,
write(' Pedro Vitti - 06132056'),nl,nl,nl,
write('---- Reino dos Animais ----'),nl,nl,
write('Digite sua Escolha:'), nl,
write(' '), nl,
write('"adicionar" para adicionar um animal'), nl,
write('"adicionarfilo" para adicionar um filo'), nl,
write('"pesquisar" para pesquisar um animal'), nl,
write('"sair" para Sair'), nl,
write(' '), nl,
read(Escolha),
processa(Escolha).
menu :- write('---- Reino dos Animais ----'),nl,nl,
write('"adicionar" para adicionar um animal'), nl,
write('"adicionarfilo" para adicionar um filo'), nl,
write('"pesquisar" para pesquisar um animal'), nl,
write('"sair" para Sair'), nl,
write(' '), nl,
read(Escolha),
processa(Escolha).
processa(Escolha) :-
Escolha==adicionar -> addAnimal,menu;
Escolha==adicionarfilo -> addClasse,menu;
Escolha==pesquisar -> consultar,menu;
Escolha==sair -> sair.
sair :-
write('Bye!').
insereTipoPele(Animal,Escolha) :-
write('Continente de Origem?'), nl,
write(''), nl,
write('europa, asia, america, oceania, africa'), nl,
read(Escolha), nl,
assert(tipoPele(Animal,Escolha)).
insereTipoHabitat(Animal,Escolha) :-
write('Seu Habitat?'), nl,
write(''), nl,
write('anfibio, aquatico, terrestre, aereo'), nl,
read(Escolha), nl,
assert(tipoHabitat(Animal,Escolha)).
insereAlimentacao(Animal,Escolha):-
write('Alimentacao?'), nl,
write(''), nl,
write('carnivoro, herbivoro ou onivoro'), nl,
read(Escolha), nl,
assert(alimentacao(Animal,Escolha)).
insereLeite(Animal,Escolha):-
write('Mamifero?'), nl,
write('sim ou nao'), nl,
read(Escolha), nl,
assert(leite(Animal,Escolha)).
insereTipoRespiracao(Animal,Escolha):-
write('Porte Fisico?'), nl,
write(''), nl,
write('microscopico, pequeno, medio, grande, imenso'), nl,
read(Escolha), nl,
assert(tipoRespiracao(Animal,Escolha)).
insereNPatas(Animal,Escolha):-
write('Possui quantas patas?'), nl,
read(Escolha), nl,
assert(nPatas(Animal,Escolha)).
insereAnimal(Animal,Classe) :- assert(animal(Animal,Classe)).
perguntaTipoPele(Escolha) :-
write('Continente de Origem?'), nl,
write(''), nl,
write('europa, asia, america, oceania, africa'), nl,
read(Escolha), nl.
perguntaTipoHabitat(Escolha) :-
write('Seu Habitat?'), nl,
write(''), nl,
write('anfibio, aquatico, terrestre, aereo'), nl,
read(Escolha), nl.
perguntaAlimentacao(Escolha):-
write('Alimentacao?'), nl,
write(''), nl,
write('carnivoro, herbivoro ou onivoro'), nl,
read(Escolha), nl.
perguntaLeite(Escolha):-
write('Mamifero?'), nl,
write('sim ou nao'), nl,
read(Escolha), nl.
perguntaTipoRespiracao(Escolha):-
write('Porte Fisico?'), nl,
write(''), nl,
write('microscopico, pequeno, medio, grande, imenso'), nl,
read(Escolha), nl.
perguntaNPatas(Escolha):-
write('Possui quantas patas?'), nl,
read(Escolha), nl.
perguntaNomeAnimal(Escolha):-
write('Qual nome do animal?'), nl,
read(Escolha),!,
findall(P,animal(Escolha,P),R),
R == [] -> true;
animalClass.
animalClass :-
write('Animal ja classificado'), nl,
fail.
insereClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe):-
write('Nao foi encontrada nehum Filo!!'),
write('Deseja cria-lo?'), nl,
read(Escolha),!,
Escolha == 'sim' -> addClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe);
Escolha == 'nao' -> fail.
sucessoAnimal :-
write('Animal adicionado').
sucessoClasse :-
write('Filo adicionado').
consultaAnimal(Animal,[]) :-
nl,
write(Animal),
write('Ainda nao classificado'),nl,
write('Deseja classifica-lo?'),nl,
write('sim ou nao?'), nl,
read(Escolha),!,
Escolha == 'sim' -> addAnimal(Animal);
Escolha == 'nao' -> intro.
consultaAnimal(Animal,[X|R]) :-
nl,
write(Animal),
write(' pertence ao(s) filo(s): '), nl,
write(' *' ),
write([X|R]),nl,
write(' * *'), nl.
/**
Camada Lógica
**/
addAnimal :-
perguntaNomeAnimal(Animal),
insereTipoPele(Animal,Pele),
insereTipoHabitat(Animal,Hab),
insereAlimentacao(Animal,Alim),
insereLeite(Animal,Leite),
insereTipoRespiracao(Animal,Resp),
insereNPatas(Animal,NPatas),
defineClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe),
insereAnimal(Animal,Classe),
tell('arquivos.pl'),
listing(animal),
listing(tipoPele),
listing(tipoHabitat),
listing(alimentacao),
listing(leite),
listing(tipoRespiracao),
listing(nPatas),
listing(classe),
told,
sucessoAnimal.
addAnimal(Animal) :-
insereTipoPele(Animal,Pele),
insereTipoHabitat(Animal,Hab),
insereAlimentacao(Animal,Alim),
insereLeite(Animal,Leite),
insereTipoRespiracao(Animal,Resp),
insereNPatas(Animal,NPatas),
defineClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe),
insereAnimal(Animal,Classe),
tell('arquivos.pl'),
listing(animal),
listing(tipoPele),
listing(tipoHabitat),
listing(alimentacao),
listing(leite),
listing(tipoRespiracao),
listing(nPatas),
listing(classe),
told,
sucessoAnimal.
defineClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe) :-
findall(P,classe(P,Pele,Hab,Alim,Leite,Resp,NPatas),R),!,
R == [] -> insereClasse(Pele,Hab,Alim,Leite,Resp,NPatas,Classe);
primeiro(R,Classe).
addClasse :-
write('Digite o nome do Filo:'), nl,
read(Classe),
perguntaTipoPele(Pele),
perguntaTipoHabitat(Hab),
perguntaAlimentacao(Alim),
perguntaLeite(Leite),
perguntaTipoRespiracao(Resp),
perguntaNPatas(Npatas),
assert(classe(Classe,Pele,Hab,Alim,Leite,Resp,Npatas)),
tell('arquivos.pl'),
listing(tipoPele),
listing(tipoHabitat),
listing(alimentacao),
listing(leite),
listing(tipoRespiracao),
listing(nPatas),
listing(classe),
listing(animal),
told,
sucessoClasse.
addClasse(Pele,Hab,Alim,Leite,Resp,Npatas, Classe) :-
write('Digite o nome do Filo:'), nl,
write(' '), nl,
read(Classe),
assert(classe(Classe,Pele,Hab,Alim,Leite,Resp,Npatas)),
tell('arquivos.pl'),
listing(tipoPele),
listing(tipoHabitat),
listing(alimentacao),
listing(leite),
listing(tipoRespiracao),
listing(nPatas),
listing(classe),
told.
consultar :-
nl,
write('Digite o nome do animal'), nl,
write(' '), nl,
read(Animal),
findall(P,animal(Animal,P),R),!,
consultaAnimal(Animal,R).
primeiro([P|_],P).
:- consult('arquivos.pl').
clear :- put(27), put(91), put(50), put(74).
carregar:-
open(animais, append, S), write(S,''),close(S),
['animais'],
nl, write('Base de dados carregada com sucesso!'), nl, nl.
iniciar :-
carregar,
clear,
nl, nl,
write('--------------------------------------------------'), nl,
write('--------------------------------------------------'), nl,
write(' Trabalho Final '), nl,
write('--------------------------------------------------'), nl,
write('--------------------------------------------------'), nl,
write(' Para inserir um novo animal utilize "inserir." '), nl,
write(' Para buscar um animal utilize "busca." '), nl,
write('--------------------------------------------------'), nl,
write('--------------------------------------------------'), nl,
write('--------------------- Grupo ----------------------'), nl,
write('--------------------------------------------------'), nl,
write('----- Dayana Spagnuelo 07132015 -----'), nl,
write('----- Glauco Neves 07132022 -----'), nl,
write('----- Guilherme Pacheco 07132051 -----'), nl,
write('----- Joao Ricardo Mattos 05232228 -----'), nl,
write('--------------------------------------------------'), nl,
write('--------------------------------------------------'), nl,
nl.
:-iniciar.
limparBusca :-
retract(patas(_)),
retract(glmamarias(_)),
retract(pelo(_)),
retract(nadadeiras(_)),
retract(branquias(_)),
retract(oviparo(_)),
retract(asa(_)).
busca :-
procurar,
limparBusca.
procurar :-
perguntaNome(N), nl, procurar(N).
procurar(N) :-
animal(N, C),
assertClasse(C),
imprimirClasse(N).
procurar(N) :-
perguntaPatas, nl,
perguntaGlMamarias, nl,
perguntaPelo, nl,
perguntaNadadeiras, nl,
perguntaBranquias, nl,
perguntaOviparo, nl,
perguntaAsa, nl,
verificaClasse,
carregar,
classe(X),
open(animais, append, S),
write(S, 'animal('), write(S, N), write(S, ', '), write(S, X), write(S, ').\n'),
close(S),
carregar,
imprimirClasse(N).
verificaClasse :-
classe(_).
verificaClasse :- write('Esta classe nao existe, como voce quer chama-la?'), nl,
read(X),
open(animais, append, S),
write(S, 'classe('), write(S, X), write(S, ') :- '),
patas(A),
write(S, 'patas('), write(S, A), write(S, '),'),
glmamarias(B),
write(S, 'glmamarias('), write(S, B), write(S, '),'),
pelo(C),
write(S, 'pelo('), write(S, C), write(S, '),'),
nadadeiras(D),
write(S, 'nadadeiras('), write(S, D), write(S, '),'),
branquias(E),
write(S, 'branquias('), write(S, E), write(S, '),'),
oviparo(F),
write(S, 'oviparo('), write(S, F), write(S, '),'),
asa(G),
write(S, 'asa('), write(S, G), write(S, ').\n'),
write(S, 'assertClasse('), write(S, X), write(S, ') :- '),
write(S, 'assert(patas('), write(S, A), write(S, ')),'),
write(S, 'assert(glmamarias('), write(S, B), write(S, ')),'),
write(S, 'assert(pelo('), write(S, C), write(S, ')),'),
write(S, 'assert(nadadeiras('), write(S, D), write(S, ')),'),
write(S, 'assert(branquias('), write(S, E), write(S, ')),'),
write(S, 'assert(oviparo('), write(S, F), write(S, ')),'),
write(S, 'assert(asa('), write(S, G), write(S, ')).\n'),
close(S).
inserir :-
write('Escreva as regras que deseja inserir na base de dados. Cada resposta deve ser seguida de um "."'), nl,
insereClasse, nl, inserePatas, nl, insereGlMamarias, nl, inserePelo, nl, insereNadadeiras, nl, insereBranquias, nl, insereOviparo, nl, insereAsa, nl,
write('Recarregando o arquivo...'),nl,
carregar.
insereClasse :-
write('Digite a Classe:'),nl,
open(animais, append, S),
read(P),
write(S, 'classe('), write(S, P), write(S,') :- '),
close(S).
inserePatas:-
write('Os animais desta classe possuem patas?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'patas('), write(S, P), write(S,'),'),
close(S).
insereGlMamarias:-
write('Os animais desta classe têm glândulas mamárias?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'glmamarias('), write(S, P), write(S,'),'),
close(S).
inserePelo:-
write('Os animais desta classe possuem pelo?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'pelo('), write(S, P), write(S,'),'),
close(S).
insereNadadeiras:-
write('Os animais desta classe possuem nadadeiras?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'nadadeiras('), write(S, P), write(S,'),'),
close(S).
insereBranquias:-
write('Os animais desta classe possuem branquias?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'branquias('), write(S, P), write(S,'),'),
close(S).
insereOviparo:-
write('Os animais desta classe são Ovíparos?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'oviparo('), write(S, P), write(S,'),'),
close(S).
insereAsa:-
write('Os animais desta classe possuem asa?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
open(animais, append, S),
read(P),
write(S, 'asa('), write(S, P), write(S,').\n'),
close(S).
perguntaNome(N):-
write('Qual o nome do animal?'), nl,
read(N), nl.
perguntaPatas:-
write('O animal possui patas?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(patas(L)).
perguntaPatas:-
write('digite somente 1 ou 2'), nl,
perguntaPatas.
perguntaGlMamarias:-
write('O animal possui glândulas mamárias?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(glmamarias(L)).
perguntaGlMamarias :-
write('digite somente 1 ou 2'), nl,
perguntaGlMamarias.
perguntaPelo:-
write('O animal possui pelo?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(pelo(L)).
perguntaPelo:-
write('digite somente 1 ou 2'), nl,
perguntaPelo.
perguntaNadadeiras:-
write('O animal possui nadadeiras?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(nadadeiras(L)).
perguntaNadadeiras :-
write('digite somente 1 ou 2'), nl,
perguntanadadeiras.
perguntaBranquias :-
write('O animal possui brânquias?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(branquias(L)).
perguntaBranquias :-
write('digite somente 1 ou 2'), nl,
perguntabranquias.
perguntaOviparo :-
write('O animal é Ovíparo?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(oviparo(L)).
perguntaOviparo :-
write('digite somente 1 ou 2'), nl,
perguntaOviparo.
perguntaAsa :-
write('O animal possui asa?'), nl,
write('1 sim'), nl,
write('2 não'), nl,
read(L), nl, L > 0, L < 3,
assert(asa(L)).
perguntaAsa :-
write('digite somente 1 ou 2'), nl,
perguntaAsa.
imprimirClasse(N):-
clear,
write(N), write(' é da classe: '), nl,
classe(X),
write('* '), write(X), nl,
imprimePatas,
imprimeGlmamarias,
imprimePelo,
imprimeNadadeiras,
imprimeBranquias,
imprimeOviparo,
imprimeAsa.
imprimePatas :- patas(1), write('possui patas;'), nl.
imprimePatas :- patas(2), write('nao possui patas;'), nl.
imprimeGlmamarias :- glmamarias(1), write('possui glandulas mamarias;'), nl.
imprimeGlmamarias :- glmamarias(2), write('nao possui glandulas mamarias;'), nl.
imprimePelo :- pelo(1), write('possui pelo'), nl.
imprimePelo :- pelo(2), write('nao possui pelo'), nl.
imprimeNadadeiras :- nadadeiras(1), write('possui nadadeiras;'), nl.
imprimeNadadeiras :- nadadeiras(2), write('nao possui nadadeiras;'), nl.
imprimeBranquias :- branquias(1), write('possui branquias;'), nl.
imprimeBranquias :- branquias(2), write('nao possui branquias;'), nl.
imprimeOviparo :- oviparo(1), write('e oviparo;'), nl.
imprimeOviparo :- oviparo(2), write('nao e oviparo;'), nl.
imprimeAsa :- asa(1), write('possui asa'), nl.
imprimeAsa :- asa(2), write('nao possui asa'), nl.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment