Prolog Prática de Programação
Por: Fabiano De Paula Soldati • 7/2/2019 • Trabalho acadêmico • 892 Palavras (4 Páginas) • 169 Visualizações
Introdução ao Prolog
Programa 01: ex_bd.pl
% Exemplo de programa em Prolog que define
% fatos e regras sobre pessoas e localizacoes geograficas.
localizado_em(santa_maria, rio_grande_do_sul).
localizado_em(porto_alegre, rio_grande_do_sul).
localizado_em(salvador, bahia).
localizado_em(rio_grande_do_sul, brasil).
localizado_em(bahia, brasil).
localizado_em(grenoble, franca).
localizado_em(paris, franca).
localizado_em(franca, europa).
nasceu_em(andre, santa_maria).
nasceu_em(jose, salvador).
nasceu_em(marc, grenoble).
nasceu_em(maria, porto_alegre).
nasceu_em(X, Y) :- localizado_em(Z, Y), nasceu_em(X, Z).
mora_em(andre, paris).
mora_em(jose, grenoble).
mora_em(marc, porto_alegre).
mora_em(maria, salvador).
mora_em(X, Y) :- localizado_em(Z, Y), mora_em(X, Z).
idade(andre, 25).
idade(jose, 30).
idade(marc, 28).
idade(maria, 32).
gaucho(X) :- nasceu_em(X, rio_grande_do_sul).
brasileiro(X) :- nasceu_em(X, brasil).
europeu(X) :- nasceu_em(X, europa).
O arquivo ex_bd.pl contém um exemplo de programa em Prolog.
Para carregar este programa, utilize o predicado consult que é pré-definido em Prolog.
Este predicado alimenta a base de dados a partir de um programa fonte.
?- consult('ex_bd.pl').
Para verificar o conteúdo da base de dados, utilize o predicado listing:
?- listing.
Para sair do SWI-Prolog, utilize o predicado pré-definido halt (ou Ctrl-d):
?- halt.
Consultas e interações
1 - Examine o programa ex_bd.pl e responda: quantos fatos e quantas regras estão definidos neste arquivo?
2 - Verifique quais são as respostas às seguintes consultas:
?- gaucho(andre). % "André é gaúcho?"
?- europeu(jose). % "José é europeu?"
3 - Verifique quais são as respostas para a seguinte consulta (utilize um ponto-e-vírgula após cada resposta para descobrir se existem outras):
?- brasileiro(X). % "Quem é brasileiro?"
4 - Na linguagem Prolog, o caracter sublinhado (_) representa uma variável sem nome. Este recurso é útil quando o valor da variável é irrelevante em uma dada regra ou consulta. Para testar o uso de variáveis anônimas, execute a seguinte consulta:
?- brasileiro(_). % "Existe algum brasileiro na base de dados?"
5 - Transforme as seguintes afirmações em fatos Prolog e inclua-os em ex_bd.pl (recarregue o programa modificado utilizando consult):
"Joana nasceu em Salvador."
"Joana tem 22 anos."
"Michel nasceu em Paris e tem 40 anos."
6 - Considerando a base de dados em ex_bd.pl, transforme as seguintes perguntas em consultas Prolog (verifique quais são as respostas retornadas pelo sistema):
"Onde fica Grenoble?"
"Quais são as pessoas nascidas na Europa?"
"José nasceu no Brasil?"
"Quais são as pessoas com mais de 30 anos?"
"Quem são os brasileiros que moram na França?"
"Há alguém que more no Rio Grande do Sul ou na Bahia?"
7 - Traduza a seguinte consulta Prolog para uma pergunta em linguagem natural:
?- localizado_em(X, brasil). Qual é a resposta para esta consulta Prolog? Por que santa_maria não está entre os resultados?
8 - Modifique o programa ex_bd.pl para levar em conta a seguinte declaração:
"Toda localidade situada no Rio Grande do Sul ou na Bahia também localiza-se no Brasil".
Repita a consulta do exercício 7 e veja o efeito da modificação feita no exercício 8.
Programa 02: ex_es.pl
% Exemplo de programa em Prolog que utiliza
% os predicados read e write (entrada e saída).
calcula_idade(IdadeAprox, AnoNasc, AnoAtual) :-
IdadeAprox is AnoAtual - AnoNasc.
interacao :-
EsteAno is 2010,
write('Em que ano você nasceu?'), nl,
read(Ano),
% suponho que você deva ter nascido há pelo menos 6 anos,
% senão não estaria lendo isso...
Ano < EsteAno-6,
(calcula_idade(Idade, Ano, EsteAno),
write('Você faz '), write(Idade),
write(' anos em '), write(EsteAno), write('!'), nl);
write('Acho que você está mentindo...'), nl.
1 - O arquivo ex_es.pl contém um exemplo de programa Prolog que utiliza predicados pré-definidos para operações de entrada e saída. Carregue este programa e execute a seguinte consulta:
...