65
Introdu¸c˜ ao Paradigma de Programa¸ ao L´ ogico Marco A L Barbosa cba Este trabalho est´ a licenciado com uma Licen¸ ca Creative Commons - Atribui¸c˜ ao-CompartilhaIgual 4.0 Internacional.

Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Introducao

Paradigma de Programacao Logico

Marco A L Barbosa

cba

Este trabalho esta licenciado com uma Licenca Creative Commons - Atribuicao-CompartilhaIgual 4.0 Internacional.

Page 2: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

ConteudoIntroducao

Imperativo vs declarativo

Funcional vs logico

Prolog

Primeiros passos

Tutorial

Fatos

Consultas

Variaveis

Conjuncoes

Regras

Exemplos

Leitura recomendada

Page 3: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

O estudo utilizando apenas este material nao e suficiente para oentendimento do conteudo. Recomendamos a leitura dasreferencias no final deste material e a resolucao (por parte doaluno) de todos os exercıcios indicados.

3 / 51

Page 4: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Introducao

Page 5: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Introducao

No paradigma de programacao declarativo, as estruturas e oselementos do programa sao escritos de maneira a especificar alogica da computacao sem descrever o fluxo de controle.

Consequencia da transparencia referencial.

5 / 51

Page 6: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Imperativo vs declarativo

Page 7: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Imperativo vs declarativo

I Imperativo

I Modelo de computacao baseado em sequencia passo a passode comandos

I Atribuicoes destrutivasI Ordem de execucao e crucial, os comandos so podem ser

entendidos no contexto das computacoes anteriores devido aosefeitos colaterais

I Controle e responsabilidade do programadosI Exemplos: Java, C, Pascal

7 / 51

Page 8: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Imperativo vs declarativo

I Declarativo

I Modelo de computacao baseado em um sistema onde asrelacoes sao especificadas diretamente em termos da entrada

I Atribuicao nao destrutivaI A ordem de execucao nao importa (nao tem efeitos colaterais)I O programador nao e responsavel pelo controleI Exemplos: SQL, Prolog, Haskell

I Alguns autores consideram “como” (imperativo) vs “o que”(declarativo)

8 / 51

Page 9: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Funcional vs logico

Page 10: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Funcional vs logico

I Os dois principais paradigmas declarativos sao o funcional e ologico

I Funcional

I Baseado em declaracao e aplicacao de funcoes (calculolambda)

I Todos os parametro de uma funcao precisam estar instanciadosI Clara distincao entre entrada e saıda

I Logico

I Baseado no calculo de predicadosI Objetos e relacoesI A computacao e feita usando um mecanismo de inferencia

logicoI A computacao pode ser realizada com variaveis nao

instanciadas

10 / 51

Page 11: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Prolog

Page 12: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Prolog

I Para estudar o paradigma logico vamos utilizar a linguagemProlog

I Existem muitas implementacoes

I Vamos utilizar o SWI-Prolog

12 / 51

Page 13: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Primeiros passos

Page 14: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Instalacao e execucao

I Instalacao

$ apt-get install swi-prolog

I Execucao

$ swipl

14 / 51

Page 15: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Edicao e consulta com editor integrado

15 / 51

Page 16: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Editor integrado

16 / 51

Page 17: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Edicao e consulta com outro editor

I Editar o arquivo usando o editor de sua preferencia

I Ler o arquivo no swipl

?- consult(’arquivo.pl’).

I Fazer consultas

?- editor(joao, E).

E = emacs.

I Depois de alterar o arquivo, ele deve ser lido novamente

17 / 51

Page 18: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Tutorial

Page 19: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Tutorial

I Neste tutorial nao seremos muito formais

I Programar em Prolog consiste em

I Especificar fatos sobre objetos e suas relacoesI Definir regras sobre objetos e suas relacoesI Fazer consultas (perguntas) sobre objetos e suas relacoes

19 / 51

Page 20: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

Page 21: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

I Um fato e algo que e verdadeiro sobre uma relacao de objetos

I Fato: Joao utiliza o editor vim.

editor(joao, vim).

I joao e vim sao objetos, editor e uma relacao

I Os nomes das relacoes e dos objetos devem comecar comletras minusculas

I A ordem dos objetos e arbitraria, mas voce deve serconsistente

I Os objetos de uma relacao sao chamados de argumentos

I O nome da relacao e chamado de predicado

I O numero de argumentos de um predicado e a aridade dopredicado

21 / 51

Page 22: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

I Uma relacao pode ter qualquer quantidade de argumentos

I Fato: Esta chovendo.

chovendo.

I Fato: Maria comprou um livro do Jorge.

comprou(maria, livro, jorge).

22 / 51

Page 23: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

I Uma relacao pode ter qualquer quantidade de argumentos

I Fato: Esta chovendo.

chovendo.

I Fato: Maria comprou um livro do Jorge.

comprou(maria, livro, jorge).

22 / 51

Page 24: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

I Uma relacao pode ter qualquer quantidade de argumentos

I Fato: Esta chovendo.

chovendo.

I Fato: Maria comprou um livro do Jorge.

comprou(maria, livro, jorge).

22 / 51

Page 25: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Fatos

I Uma relacao pode ter qualquer quantidade de argumentos

I Fato: Esta chovendo.

chovendo.

I Fato: Maria comprou um livro do Jorge.

comprou(maria, livro, jorge).

22 / 51

Page 26: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

Page 27: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Podemos fazer consultas sobre os fatos que foram definidos

I Dado os seguintes fatos

editor(joao, vim).

editor(pedro, emacs).

I Podemos fazer algumas consultas

I E verdade que o Joao utiliza o editor vim?

?- editor(joao, vim).

true.

I E verdade que o Joao utiliza o editor emacs?

?- editor(joao, emacs).

false.

I Observe que a forma de uma consulta e a mesma de um fato

24 / 51

Page 28: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Podemos fazer consultas sobre os fatos que foram definidos

I Dado os seguintes fatos

editor(joao, vim).

editor(pedro, emacs).

I Podemos fazer algumas consultas

I E verdade que o Joao utiliza o editor vim?

?- editor(joao, vim).

true.

I E verdade que o Joao utiliza o editor emacs?

?- editor(joao, emacs).

false.

I Observe que a forma de uma consulta e a mesma de um fato

24 / 51

Page 29: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Podemos fazer consultas sobre os fatos que foram definidos

I Dado os seguintes fatos

editor(joao, vim).

editor(pedro, emacs).

I Podemos fazer algumas consultas

I E verdade que o Joao utiliza o editor vim?

?- editor(joao, vim).

true.

I E verdade que o Joao utiliza o editor emacs?

?- editor(joao, emacs).

false.

I Observe que a forma de uma consulta e a mesma de um fato

24 / 51

Page 30: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Podemos fazer consultas sobre os fatos que foram definidos

I Dado os seguintes fatos

editor(joao, vim).

editor(pedro, emacs).

I Podemos fazer algumas consultas

I E verdade que o Joao utiliza o editor vim?

?- editor(joao, vim).

true.

I E verdade que o Joao utiliza o editor emacs?

?- editor(joao, emacs).

false.

I Observe que a forma de uma consulta e a mesma de um fato

24 / 51

Page 31: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Quando uma consulta e realizada o Prolog faz uma buscasequencial por fatos que unificam com o fato que esta sendoconsultado

I Dois fatos unificam se os predicados sao os mesmos e cadaargumento correspondente e o mesmo

I Se um fato que unifica com a consulta for encontrado, oProlog ira responder true, caso contrario o Prolog responderafalse

I A resposta false significa que nao foi encontrado um fatoque unifica com a questao

25 / 51

Page 32: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Fatos

humano(socrates).

humano(aristoteles).

ateniense(socrates).

I Consulta

?- ateniense(aristoteles).

false.

I Apesar de poder ser verdade no mundo real que Aristotelesera ateniense (viveu em Atenas), nos nao podemos provar istoa partir dos fatos dados

26 / 51

Page 33: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Consultas

I Fatos

humano(socrates).

humano(aristoteles).

ateniense(socrates).

I Consulta

?- ateniense(aristoteles).

false.

I Apesar de poder ser verdade no mundo real que Aristotelesera ateniense (viveu em Atenas), nos nao podemos provar istoa partir dos fatos dados

26 / 51

Page 34: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

Page 35: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

I Para fazer perguntas que as respostas nao sejam apenas true

e false usamos variaveis

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

I Consulta

I Existe algum E tal que Pedro utiliza o editor E?

?- editor(pedro, E).

E = emacs.

I Observe que as variaveis comecam com letra maiuscula

28 / 51

Page 36: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

I Para fazer perguntas que as respostas nao sejam apenas true

e false usamos variaveis

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

I Consulta

I Existe algum E tal que Pedro utiliza o editor E?

?- editor(pedro, E).

E = emacs.

I Observe que as variaveis comecam com letra maiuscula

28 / 51

Page 37: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

I O Prolog realiza uma busca da mesma forma que antes, masconsidera que uma variavel nao instanciada unifica comqualquer objeto

I Quando o Prolog encontra um fato que unifica com aconsulta, ele marca o fato e exibe os valores unificados com asvariaveis

I Se o utilizador pressionar a tecla enter, a busca e finalizadaI Se o utilizador pressionar a tecla ; a busca e reiniciada a partir

da marca

29 / 51

Page 38: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

I Consulta

I Existe algum E tal que Joao utiliza o editor E?

?- editor(joao, E).

E = vim ;

E = emacs.

30 / 51

Page 39: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Variaveis

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

I Consulta

I Existe algum E tal que Joao utiliza o editor E?

?- editor(joao, E).

E = vim ;

E = emacs.

30 / 51

Page 40: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

Page 41: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Tambem e possıvel fazer consultas mais elaboradas usandoconjuncoes (e)

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consultas

I Joao e Pedro utilizam o editor emacs?I Joao utiliza o editor emacs e Pedro utiliza o editor emacs?

?- editor(joao, emacs), editor(pedro, emacs).

true.

I O sımbolo “,” e pronunciado “e”

32 / 51

Page 42: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Tambem e possıvel fazer consultas mais elaboradas usandoconjuncoes (e)

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consultas

I Joao e Pedro utilizam o editor emacs?I Joao utiliza o editor emacs e Pedro utiliza o editor emacs?

?- editor(joao, emacs), editor(pedro, emacs).

true.

I O sımbolo “,” e pronunciado “e”

32 / 51

Page 43: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Quando uma sequencia de metas separadas por vırgula e dadapara o Prolog, ele tenta satisfazer uma meta por vez

I Todas as metas devem ser satisfeitas para a consulta sersatisfeita

33 / 51

Page 44: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existe algum E tal que Joao e Maria utilizam o editor E?I Existe algum E tal que Joao utiliza o editor E e Maria utiliza o

editor E?

?- editor(joao, E), editor(maria, E).

E = vim ;

false.

34 / 51

Page 45: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existe algum E tal que Joao e Maria utilizam o editor E?I Existe algum E tal que Joao utiliza o editor E e Maria utiliza o

editor E?

?- editor(joao, E), editor(maria, E).

E = vim ;

false.

34 / 51

Page 46: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existem X e Y tal que X e Y utilizam o editor emacs?I Existem X e Y tal que X utiliza o editor emacs e Y utiliza o

editor emacs?

?- editor(X, emacs), editor(Y, emacs).

X = Y, Y = joao ;

X = joao,

Y = pedro ;

X = pedro,

Y = joao ;

X = Y, Y = pedro.

35 / 51

Page 47: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existem X e Y tal que X e Y utilizam o editor emacs?I Existem X e Y tal que X utiliza o editor emacs e Y utiliza o

editor emacs?

?- editor(X, emacs), editor(Y, emacs).

X = Y, Y = joao ;

X = joao,

Y = pedro ;

X = pedro,

Y = joao ;

X = Y, Y = pedro.

35 / 51

Page 48: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim)

I Consulta

I Existem X e Y tal que X e Y utilizam o editor emacs e o nomede X “vem antes” que o de Y?

?- editor(X, emacs), editor(Y, emacs), X @< Y.

X = joao,

Y = pedro ;

false.

36 / 51

Page 49: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim)

I Consulta

I Existem X e Y tal que X e Y utilizam o editor emacs e o nomede X “vem antes” que o de Y?

?- editor(X, emacs), editor(Y, emacs), X @< Y.

X = joao,

Y = pedro ;

false.

36 / 51

Page 50: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existem X, Y e Z tal que X e Y utilizam o editor Z?

?- editor(X, Z), editor(Y, Z).

I Qual e a resposta?

37 / 51

Page 51: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Conjuncoes

I Fatos

editor(joao, vim).

editor(joao, emacs).

editor(pedro, emacs).

editor(maria, vim).

I Consulta

I Existem X, Y e Z tal que X e Y utilizam o editor Z?

?- editor(X, Z), editor(Y, Z).

I Qual e a resposta?

37 / 51

Page 52: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Regras

Page 53: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Regras

I Forma de abstracao utilizada pelo Prolog

I Usamos regras para dizer que um fato depende de um outrogrupo de fatos

I Uma regra e um sentenca generica sobre objetos e suasrelacoes

I Exemplo: dois programadores podem fazer um par paraprogramacao se eles utilizam o mesmo editor

par(X, Y) :-

editor(X, Z),

editor(Y, Z),

X @< Y.

39 / 51

Page 54: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplos

Page 55: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.1

Defina um predicado circuito(A, B, C, D) que e verdadeiro seas entradas A, B e C produzem a saıda D no circuito abaixo.

A ---|\ X

| >o----+

B -+-|/ |

| +-|\

| | >-- D

| +-|/

+-|\ Y |

| )-----+

C ---|/

41 / 51

Page 56: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.1

%% circuito(A?, B?, C?, D?) is nondet

%

% Verdadeiro se o circuito exemplo com as entradas A, B e C produz

% a saıda D.

circuito(A, B, C, D) :-

nand(A, B, X),

or(B, C, Y),

and(X, Y, D).

42 / 51

Page 57: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.1

%% and(A?, B?, C?) is nondet

%

% Verdadeiro se C = A and B.

and(0, 0, 0).

and(0, 1, 0).

and(1, 0, 0).

and(1, 1, 1).

%% or(A?, B?, C?) is nondet

%

% Verdadeiro se C = A or B.

or(0, 0, 0).

or(0, 1, 1).

or(1, 0, 1).

or(1, 1, 1).

43 / 51

Page 58: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.1

%% not(A?, B?) is nondet

%

% Verdadeiro se A = not B.

not(0, 1).

not(1, 0).

%% and(A?, B?, C?) is nondet

%

% Verdadeiro se C = not (A and B).

nand(A, B, C) :-

and(A, B, S),

not(S, C).

44 / 51

Page 59: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.1

?- circuito(1, 0, 1, 1).

true ;

false.

?- circuito(A, B, C, 1).

A = B, B = 0,

C = 1 ;

A = C, C = 0,

B = 1 ;

A = 0,

B = C, C = 1 ;

A = C, C = 1,

B = 0 ;

false.

I Inicialmente fizemos o predicado pensando em especificar asentradas do circuito e obter a saıda, mas e possıvel especificara saıda e obter as entradas!

45 / 51

Page 60: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.2

Defina um predicado coloracao(A, B, C, D, E) que everdadeiro se A, B, C, D, E sao cores que podem colorir asrespectivas regioes do mapa abaixo de maneira que duas regioesadjacentes nao tenham a mesma cor.

+-------+-------+

| A | C |

| +-------+

+-------| D |

| B +-------+

| | E |

+-------+-------+

46 / 51

Page 61: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.2

%% colocarao(A?, B?, C?, D?, E?) is nondet

%

% Verdadeiro se A, B, C, D, E s~ao cores que podem colorir as

% respectivas regi~oes do mapa exemplo de maneira que duas

% regi~oes adjacentes n~ao tenham a mesma cor.

coloracao(A, B, C, D, E) :-

cor_dif(A, C),

cor_dif(A, D),

cor_dif(A, B),

cor_dif(B, D),

cor_dif(B, E),

cor_dif(C, D),

cor_dif(D, E).

47 / 51

Page 62: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.2

%% cor dif(A?, B?) is nondet

%

% Verdeiro se A e uma cor diferente da cor B.

cor_dif(A, B) :-

cor(A),

cor(B),

A \== B.

%% cor(A?) is nondet

%

% Verdadeiro se A e uma cor.

cor(verde).

cor(azul).

cor(amarelo).

48 / 51

Page 63: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Exemplo 1.2

?- coloracao(A, B, C, D, E).

A = E, E = verde,

B = C, C = azul,

D = amarelo ;

A = E, E = verde,

B = C, C = amarelo,

D = azul

...

49 / 51

Page 64: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Leitura recomendada

Page 65: Introdução - Paradigma de Programação Lógico · 2018-08-03 · I Programar em Prolog consiste em I Especi car fatos sobre objetos e suas rela˘c~oes I De nir regras sobre objetos

Leitura recomendada

I The principal programming paradigms

I Declarative programming

I Logic programming

I Prolog

51 / 51