UFSM > Informática > ELC117 - Paradigmas de Programação

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

  1. Baixe o arquivo bd.pl, que contém um exemplo de programa em Prolog.

  2. Inicie o SWI-Prolog e carregue o programa bd.pl no interpretador:
    ?- [bd].
    

  3. Para sair do SWI-Prolog, utilize o predicado pré-definido halt (ou Control-D):
    ?- halt.
    

Fatos, regras e consultas

  1. 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?

  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 (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?"
    

  5. 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."

  6. (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?"

  7. 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".

  8. 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

Página criada em: Thu Apr 28 09:44:29 BRT 2011. Última atualização em: Thu Apr 28 10:10:32 2011. Autoria: Andrea Schwertner Charão.