Exercícios Práticos: Programação lógica com Prolog
Preparação
Para estes exercícios você vai precisar do ambiente SWI-Prolog. Ele está disponível em: http://www.swi-prolog.org/download/stable
Interação Básica
- Baixe o arquivo bd.pl, que contém um exemplo de programa em Prolog.
- Inicie o SWI-Prolog e carregue o programa bd.pl no interpretador:
?- [bd].
- Para sair do SWI-Prolog, utilize o predicado pré-definido halt (ou Control-D):
?- halt.
Fatos, regras e consultas
- Examine o programa bd.pl e responda:
- quais são os fatos e quais são as regras neste arquivo?
- qual o significado (em português) das regras neste programa?
- Verifique quais são as respostas às seguintes consultas:
?- gaucho(andre). % "André é gaúcho?" ?- europeu(jose). % "José é europeu?"
- 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?"
- Na linguagem Prolog, o caracter sublinhado (_) representa uma variável sem nome (anônima). 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?"
- Transforme as seguintes afirmações em fatos Prolog e inclua-os em bd.pl (recarregue o programa modificado!):
- "Joana nasceu em Salvador."
- "Joana tem 22 anos."
- "Michel nasceu em Paris e tem 40 anos."
- (Solução) Considerando a base de dados em 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?"
- Explique o significado das seguintes regras e acrescente-as ao programa bd.pl:
year(A) :- get_time(X), stamp_date_time(X,D,0), date_time_value(year,D,A). ano_nascimento(Pessoa, AnoAprox) :- idade(Pessoa, Idade), year(Esteano), AnoAprox is Esteano - Idade.
Dica: pesquise na Internet o significado dos predicados pré-definidos get_time, stamp_date_time e date_time_value. Consulte os slides da disciplina para entender para que serve o "is". - Transforme a seguinte pergunta em uma consulta Prolog e verifique a resposta retornada:
- "Qual é o ano aproximado de nascimento de André?"
- "Quem são os gaúchos nascidos entre 1975 e 1985?"
Material de apoio
- Programação Lógica
Slides com o resumo do conteúdo necessário para estes exercícios. - SWI-Prolog Reference Manual
Manual de referência do SWI Prolog.