UFSM > Ciência da Computação > ELC117 - Paradigmas de Programação

Preparação

Para estes exercícios você vai precisar do ambiente SWI-Prolog, que está disponível no NCC:

$ pl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?-

Interação Básica

  1. 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').
    

  2. Descubra uma maneira abreviada de utilizar o predicado consult. Para isso, consulte o manual on-line do SWI-Prolog:
    ?- help(consult).
    

  3. Para verificar o conteúdo da base de dados, utilize o predicado listing:
    ?- listing.
    

  4. Para sair do SWI-Prolog, utilize o predicado pré-definido halt (ou Ctrl-d):
    ?- halt.
    

Fatos, regras e consultas

  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. (Solução) 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. (Solução) 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".

  9. Repita a consulta do exercício 7 e veja o efeito da modificação feita no exercício 8.

Entrada e saída

  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:
    ?- interacao.
    
    Atenção: para terminar a entrada de dados você deve digitar um ponto final e teclar [Enter].

Mais programas

  1. O arquivo ex_cont.pl contém um exemplo de programa Prolog que conta de 1 até 10. Carregue este programa e execute-o:
    ?- conta.
    

  2. Inclua no programa ex_cont.pl uma nova regra para contagem regressiva de B até A, sendo que B >= A.

  3. (Solução) Crie um programa Prolog interativo (semelhante a ex_es.pl) que leia um número N positivo e imprima na tela o somatório de 1 até N. Dica: o somatório de 1 é igual a 1.

  4. (Solução) Crie um programa Prolog que imprima a famosa canção:
    1 elefante incomoda muita gente
    2 elefantes incomodam incomodam muito mais
    3 elefantes incomodam muita gente
    4 elefantes incomodam incomodam incomodam incomodam muito mais
    
    O número (N) de elefantes deve ser um argumento para o programa. Dica: para determinar se um número N é par, utilize as seguintes regras:
    par(0).
    par(N) :- M is floor(N/2)*2, M = N.
    impar(N) :- not(par(N)).
    

Operações com listas

  1. (Use o template) Defina os predicados constroi_lista(L), somatorio(L,S) e media(L, M) para completar o programa abaixo:
    main :-
         constroi_lista(L),
         somatorio(L, S),
         write('Somatorio :'), write(S), nl,
         media(L, M),
         write('Media :'), write(M), nl.
    

Material de apoio

Página criada em: Tue Sep 28 7:29:14 BRT 2010. Última atualização em: Tue Sep 28 7:30:38 2010. Autoria: Juliana Kaizer Vizzotto.