Escolar Documentos
Profissional Documentos
Cultura Documentos
Marco A L Barbosa
malbarbo.pro.br
Departamento de Informática
Universidade Estadual de Maringá
cba
Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.
http://github.com/malbarbo/na-proglog
Introdução
Introdução
1/49
Imperativo vs declarativo
• Imperativo
• Modelo de computação baseado em sequência passo a passo de
comandos
• Atribuições destrutivas
2/49
Imperativo vs declarativo
• Declarativo
• Modelo de computação baseado em um sistema onde as
relações são especificadas diretamente em termos da entrada
3/49
Imperativo vs declarativo
4/49
Paradigmas declarativos
• Lógico
• Por restrições
5/49
Funcional vs lógico
• Funcional
• Baseado em declaração e aplicação de funções (cálculo lambda)
6/49
Funcional vs lógico
• Lógico
• Baseado no cálculo de predicados
• Objetos e relações
7/49
Prolog
8/49
Instalação e execução
• Instalação
• Execução
$ swipl
9/49
Edição e consulta com editor integrado
10/49
Edição e consulta com editor integrado
11/49
Edição e consulta com editor web swish
12/49
Edição e consulta com outro editor
?- consult('arquivo.pl').
• Fazer consultas
?- editor(joao, E).
E = emacs.
13/49
Tutorial
Tutorial
14/49
Fatos
• Exemplo de fato
• João utiliza o editor vim
editor(joao, vim).
15/49
Fatos
16/49
Fatos
chovendo.
17/49
Consultas
18/49
Consultas
editor(joao, vim).
editor(pedro, emacs).
?- editor(joao, vim).
true.
?- editor(joao, emacs).
false.
19/49
Consultas
20/49
Consultas
• Fatos
humano(socrates).
humano(aristoteles).
ateniense(socrates).
• Consulta
?- ateniense(aristoteles).
false.
21/49
Variáveis
22/49
Variáveis
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
• Consulta
• Existe algum E tal que Pedro utiliza o editor E?
?- editor(pedro, E).
E = emacs.
23/49
Variáveis
24/49
Variáveis
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
• Consulta
• Existe algum E tal que João utiliza o editor E?
?- editor(joao, E).
E = vim ;
E = emacs.
25/49
Conjunções
26/49
Conjunções
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
editor(maria, vim).
• Consultas
• João e Pedro utilizam o editor emacs?
28/49
Conjunções
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
editor(maria, vim).
• Consulta
• Existe algum E tal que João e Maria utilizam o editor E? De
outra forma: existe algum E tal que João utiliza o editor E e
Maria utiliza o editor E?
29/49
Conjunções
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
editor(maria, vim).
• Consulta
• Existem X e Y tal que X e Y utilizam o editor emacs? De outra
forma: existem X e Y tal que X utiliza o editor emacs e Y utiliza
o editor emacs?
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
editor(maria, vim)
• Consulta
• Existem X e Y tal que X e Y utilizam o editor emacs e o nome
de X “vem antes” que o de Y?
31/49
Conjunções
• Fatos
editor(joao, vim).
editor(joao, emacs).
editor(pedro, emacs).
editor(maria, vim).
• Consulta
• Existem X, Y e Z tal que X e Y utilizam o editor Z?
• Qual é a resposta?
32/49
Regras
33/49
Exemplo de regra
par(X, Y) :-
editor(X, Z),
editor(Y, Z),
X @< Y.
34/49
Exemplos
Exemplo 1.1
A ---|\ X
| >o----+
B -+-|/ |
| +-|\
| | >-- D
| +-|/
+-|\ Y |
| )-----+
C ---|/
35/49
Exemplo 1.1
circuito(A, B, C, D) :-
nand(A, B, X),
or(B, C, Y),
and(X, Y, D).
36/49
Exemplo 1.1
and(0, 0, 0).
and(0, 1, 0).
and(1, 0, 0).
and(1, 1, 1).
37/49
Exemplo 1.1
or(0, 0, 0).
or(0, 1, 1).
or(1, 0, 1).
or(1, 1, 1).
38/49
Exemplo 1.1
not(0, 1).
not(1, 0).
39/49
Exemplo 1.1
nand(A, B, C) :-
and(A, B, S),
not(S, C).
40/49
Exemplo 1.1
?- circuito(1, 0, 1, 1).
true ;
false.
41/49
Exemplo 1.1
42/49
Exemplo 1.1
?- 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.
43/49
Exemplo 1.2
+-------+-------+
| A | C |
| +-------+
+-------| D |
| B +-------+
| | E |
+-------+-------+
44/49
Exemplo 1.2
cor_dif(A, B) :-
cor(A),
cor(B),
A \== B.
46/49
Exemplo 1.2
%% cor(A?) is nondet
%
% Verdadeiro se A é uma cor.
cor(verde).
cor(azul).
cor(amarelo).
47/49
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
...
48/49
Leitura recomendada
Leitura recomendada
• Declarative programming
• Logic programming
• Prolog
49/49