A Linguagem Prolog

Você também pode gostar

Você está na página 1de 16

2.

A Linguagem
Prolog
A Cláusula Prolog
“se” “e” “ou”

a :- b1, b2... bi; bj... bn.

Cabeça Condição

2
Introdução à Programação Prolog
Operadores Prolog

Linguagem Cálculo de Programas


Natural Predicados Prolog
E  ,
OU  ;
SE  :-
NÃO  not

3
Introdução à Programação Prolog
Fatos
Seja a árvore genealógica que pode ser representada pelo
mostrada abaixo... seguinte programa Prolog:

progenitor(maria, josé).
Maria João
progenitor(joão, josé).
progenitor(joão, ana).
progenitor(josé, júlia).
José Ana progenitor(josé, íris).
progenitor(íris, jorge).

Júlia Íris Este programa representa a


relação progenitor/2, na forma de
um predicado, que contém 6
cláusulas, que são todas fatos.
Jorge

4
Introdução à Programação Prolog
Consultas
O programa pode ser pensado que pode ser consultada de várias
como uma tabela em uma BD. maneiras:
?- progenitor(joão, ana).
progenitor(maria, josé). yes
progenitor(joão, josé). ?- progenitor(joão, jorge).
progenitor(joão, ana). no
progenitor(josé, júlia).
?- progenitor(joão, X).
progenitor(josé, íris).
X=josé;
progenitor(íris, jorge). X=ana;
no
No caso de um programa ?- progenitor(X,Y).
constituído unicamente de fatos, a X=maria, Y=josé;
semântica é exatamente a mesma X=joão, Y=josé;
de uma BD relacional... ...
X=íris, Y=jorge;
no 5
Introdução à Programação Prolog
Ampliando a Base de Fatos
O programa pode ser ampliado progenitor(maria, josé).
acrescentando-se novos fatos progenitor(joão, josé).
que inclusive podem progenitor(joão, ana).
estabelecer novas relações. progenitor(josé, júlia).
progenitor(josé, íris).
No exemplo ao lado progenitor(íris, jorge).
acrescentou-se ao programa
original as relações
masculino(joão).
masculino/1 e feminino/1.
masculino(josé).
masculino(jorge).
Estas relações, que possuem
aridade 1, podem ser pensadas
como sendo atributos dos feminino(maria).
objetos a que se aplicam. feminino(ana).
feminino(júlia).
feminino(íris).
6
Introdução à Programação Prolog
Regras
As relações pai/2 e mãe/2 Em Prolog:
podem agora ser definidas
da seguinte maneira: pai(X,Y) :-
progenitor(X,Y),
X é pai de Y se masculino(X).
X é progenitor de Y e
X é masculino. mãe(X,Y) :-

X é mãe de Y se progenitor(X,Y),
X é progenitor de Y e feminino(X).
X é feminino.

7
Introdução à Programação Prolog
Mais Regras
As relações irmão/2 e Em Prolog:
irmã/2 podem agora ser
definidas da seguinte irmão(X,Y) :-
maneira: progenitor(Z,X),
progenitor(Z,Y),
X é irmão de Y se masculino(X).
Z é progenitor de X e
Z é progenitor de Y e irmã(X,Y) :- ...
X é masculino.
mas, esta regra tem um
X é irmã de Y se ... problema. (qual?)

8
Introdução à Programação Prolog
Exercício
Acrescentar ao programa da árvore
genealógica as seguintes relações
(em 10 minutos):

avô/2

tia/2

prima/2

9
Introdução à Programação Prolog
Representação Textual
nasceu(joão,pelotas).
Considere o seguinte texto: nasceu(jean,paris).

“João nasceu em Pelotas e Jean fica(paris,frança).


nasceu em Paris. Paris fica na fica(pelotas,rs).
França, enquanto que Pelotas
fica no Rio Grande do Sul. Mas gaúcho(X):-
só é gaúcho quem nasceu no Rio nasceu(X,Y),
Grande do Sul, tchê.” fica(Y,rs).

Ao lado a codificação em ?- gaúcho(X).


Prolog: X=joão;
no

10
Introdução à Programação Prolog
Predicados Recursivos
Seja, por exemplo, a relação Uma tentativa de
antepassado/2: codificar esta relação em
Prolog seria:

antepassado(X,Y) :-
Maria João progenitor(X,Y).
progenitor progenitor
antepassado(X,Y) :-
Júlia Íris progenitor(X,Z),
progenitor(Z,Y).
(a) progenitor
antepassado direto
... (indefinidamente).
Jorge

(b) Claramente, uma má


antepassado indireto solução. (Por que?)

11
Introdução à Programação Prolog
Predicados Recursivos
Uma representação mais Uma codificação recursiva
geral: para antepassado/2:
João
antepassado(X,Y) :-
progenitor
progenitor(X,Y).
Íris
antepassado(X,Y) :-
antepassado
progenitor(X,Z),
... antepassado(Z,Y).
antepassado

... (só!).
Y
Por que esta solução é
melhor que a anterior?
12
Introdução à Programação Prolog
Caminhos em Grafos
Seja o grafo direcionado abaixo: conecta(a,b,3).
conecta(a,c,4).
B
...
2 E
2 conecta(e,f,2).
3 D 2
5
caminho(X,Y,K):-
A
4
F conecta(X,Y,K).
4
5 caminho(X,Y,K):-
conecta(X,Z,K1),
C caminho(Z,Y,K2),
K is K1+K2.
E as relações conecta(X,Y,K) e
caminho(X,Y,K), onde X e Y ?- caminho(X,Y,K).
são nodos e K é o custo entre X=a, Y=b, K=3;
eles. Ao lado, em Prolog: ...
no

13
Introdução à Programação Prolog
Predicados Recursivos
• Referenciam a si próprios.
• Possuem, no mínimo, duas cláusulas, uma recursiva
e a outra não.
• A cláusula não-recursiva denomina-se cláusula
básica.
• As cláusulas básicas podem ser regras ou fatos.
• As cláusulas recursivas são sempre regras.
• O predicado recursivo somente é bem sucedido na
cláusula básica.
• A cláusula recursiva nunca é bem sucedida.

14
Introdução à Programação Prolog
Programa Prolog
Consulta:
?-pai(joão, X). É executado a Problema
partir de uma O domínio do do
consulta ou Cada problema é Mundo Real
cláusula predicado representado
objetivo denota uma como um
Teorema a
ser provado ( A) relação conjunto de
relações

Programa Conjunto de
PROLOG Predicados A é verdadeiro

Fatos:
Sistema Conjunto de Predicados são A pai(joão, josé).
Verdades
PROLOG axiomas conjuntos de incondicionais
cláusulas com
o mesmo nome
e aridade Regras: pai(X, Y) :-
Dedução SLD Resultado: Verdades A  B, C, D ... masculino(X),
Instanciações condicionais progenitor(X, Y).
das variáveis
da consulta
que permitem Um predicado é
verdadeiro se pelo
prová-la A é verdadeiro Variáveis
menos uma das
verdadeira. se B, C, D ... começam com
suas cláusulas é
são todos maiúsculas e
verdadeira
verdadeiros constantes com
minúsculas

15
Introdução à Programação Prolog
Tema para Casa
Criar a base de fatos da sua árvore genealógica
(somente com as relações progenitor/2,
masculino/1 e feminino/1).

Enriquecer com outras relações de parentesco


além das apresentadas (por exemplo: bisavó/2,
cunhado/2, ... etc).

Testar!

Sugestão: Pedir a ajuda das pessoas mais velhas


da família.

16
Introdução à Programação Prolog

Você também pode gostar