Documente Academic
Documente Profesional
Documente Cultură
Bibliografia:
Ivan Bratko, Delfim Torres
Programa:
conjunto de axiomas que descrevem os conhecimentos
e os pressupostos necessrios resoluo de um
problema
Problema
assero lgica a ser demonstrada (objectivo)
Execuo
demonstrao do objectivo com base no programa
PROLOG - 1
Sintaxe e Significado de um
programa PROLOG
n
Clusulas de Horn
n
Programa em Prolog
n
PROLOG - 2
Notao
Lgica de Predicados
PROLOG
,
;
:
conjuno
disjuno
implicao
Exemplos
Ponto!
Corpo
PROLOG - 3
Termos PROLOG
Termos
Objectos simples
Constantes
tomos
tomos
Variveis
Estruturas
Variveis
Constantes
ana
Manuel
helloWorld
Vila Real
x_25
::=
==>
<---->
Resultado
Objecto
_x13
Varivel annima: _
PROLOG - 4
Termos PROLOG
Termos
Objectos simples
Constantes
tomos
Estruturas
Variveis
Constantes
Estruturas
data( 27, Fevereiro, 2008 )
functor
argumentos
aridade: n de argumentos
data/3 designa a estrutura de functor data e aridade 3
PROLOG - 5
Adequao (matching)
n
?-data(D,M,2008) = data(27,fev,A).
D = 27
M = fev
A = 2008
?-data(D,M,2008) = data(D1,fev,A).
D = D1
M = fev
A = 2008
?-data(D,M,2008) = data(27,fev,1997).
no
ECI, Amlcar Cardoso
Listas
n
Lista:
n
Exemplo:
[Cabea | Cauda]
[mesa | [jogo, livro] ]
[mesa, jogo, livro]
[mesa, jogo | [livro] ]
PROLOG - 7
Listas
[a, b, c] = [a, b | [c]] = [a | [b, c]] = [a, b, c | [ ]]
? - [a, b | [c]] = [a | [b, c]].
Yes
? - [a, b, c] = [X | Y].
X=a
Y = [b, c]
? - [a, b, c] = [X, Y | Z]
X=a
Y=b
Z = [c]
ECI, Amlcar Cardoso
PROLOG - 8
member(X, L)
n
X membro de L
member(X, [X | Cauda]).
member(X, [Cabeca | Cauda]):member(X, Cauda).
Ou:
member(X, [X | _ ]).
member(X, [ _ | Cauda]):member(X, Cauda).
PROLOG - 9
append(L1, L2, L)
n
L a concatenao
de L1 com L2
[X | L1]
L1
L2
L3
append([ ], L, L).
append([X | L1], L2, [X | L3]):append(L1, L2, L3).
? - append([a, b], [1, 2], L).
L = [a, b, 1, 2]
[X | L3]
ECI, Amlcar Cardoso
PROLOG - 10
Decomposio de
Listas:
? - append(_, [ X, c, Y | _ ],
[a, b, c, d, e, f]).
X=b
Y=d
L1 = [a, b, c]
L2 = [ ] ;
no
ECI, Amlcar Cardoso
Pesquisa de Padres:
Membro de Lista:
member1(X, L):append( _ , [ X | _ ], L).
X membro de L se fr possvel
decompor L em duas listas de forma
a que X seja a cabea da segunda
PROLOG - 11
delete(X, L, Ld)
n
Ld a lista que
resulta de se retirar
X de L
insert(X, L, Li)
n
Li a lista que
resulta de se inserir
X em L
PROLOG - 12
permutation(L, Lp)
n
Lp uma
permutao de L
L
1
Permuta L...
L1
2
insere X em L1
permutation([ ], [ ]).
permutation([X | L], P) :permutation(L, L1),
insert(X, L1, P).
?- permutation([a,b,c], L).
L = [a, b, c] ;
L = [b, a, c] ;
L = [b, c, a] ;
L = [a, c, b] ;
L = [c, a, b] ;
L = [c, b, a] ;
no
PROLOG - 13
permutation([ ], [ ]).
permutation([X | L], P) :permutation(L, L1),
insert(X, L1, P).
1 Soluo
PROLOG - 14
2 Soluo
permutation([ ], [ ]).
permutation([X | L], P) :permutation(L, L1),
insert(X, L1, P).
3 Soluo
4 Soluo
PROLOG - 15
Significado declarativo:
Significado procedimental:
PROLOG - 16
Significado Declarativo de um
Programa
Um objectivo G verdadeiro ( consequncia lgica do programa)
se e s se:
existe uma clusula C no programa tal que
existe uma instncia I de C tal que
a) a cabea de I idntica a G e
b) todos os objectivos no corpo de I so verdadeiros
n
Exemplo de um programa:
Quais as respostas?
mortal(X):- humano(X).
? - mortal(socrates).
humano(socrates).
? - mortal(X).
humano(aristoteles).
? - mortal(Professor de ECI).
PROLOG - 17
Significado Procedimental de um
Programa
n
Um programa:
dark(X)?
big(bear).
small(cat).
black(X)?
brown(bear).
black(cat).
dark(Z):- black(Z).
dark(Z):- brown(Z).
dark(X), big(X)
dark(Z):- black(Z).
X=Z
black(X), big(X)
dark(X)?
dark(Z):- brown(Z).
X=Z
brown(X), big(X)
black(X)?
black(cat).
X = cat
big(cat)
fail
brown(bear).
X = bear
big(bear)
big(bear)?
black(cat)?
fail
yes
Resposta: X = bear
ECI, Amlcar Cardoso
PROLOG - 18
Programao declarativa em
Prolog
Uma abordagem
1 Construir o programa de forma declarativa
2 Analisar programa sob o ponto de vista
procedimental
3 Efectuar alteraes se necessrio
n
Exemplo:
n
PROLOG - 19
PROLOG - 20
O Mundo Macaco
n
onde:
Pm o ponto da sala onde est o macaco
Pb o ponto da sala onde est o banco
Ch diz-nos se o macaco est no cho ou em
cima do banco
B diz-nos se o macaco apanhou a banana
PROLOG - 21
O Mundo Macaco
n
Objectivo:
situacao( _, _, _, tem)
PROLOG - 22
O Mundo Macaco
n
PROLOG - 23
O Mundo Macaco
n
PROLOG - 24
O Mundo Macaco
n
PROLOG - 25
O Programa
n
Predicado cumpre_obj(S):
n
cumpre_obj(situacao( _, _, _, tem).
cumpre_obj(S1):passo(S1, Accao, S2),
cumpre_obj(S2).
Desenvolvimento de forma declarativa
ECI, Amlcar Cardoso
PROLOG - 26
Todo o programa
cumpre_obj(situacao( _, _, _, tem).
cumpre_obj(S1):passo(S1, Accao, S2),
cumpre_obj(S2).
passo(situacao(centro, sobre-banco, centro, nao_tem),
apanha_banana, situacao(centro, sobre-banco, centro, tem)).
passo(situacao(Pm, no_chao, Pm, H),
sobe_banco, situacao(Pm, sobre-banco, Pm, H)).
passo(situacao(P1, no_chao, P1, H),
empurra_banco(P1, P2), situacao(P2, no_chao, P2, H)).
passo(situacao(P1, no_chao, Pc, H),
anda(P1, P2), situacao(P2, no_chao, Pc, H)).
ECI, Amlcar Cardoso
PROLOG - 27
Leitura procedimental do
programa
?- cumpre_obj(situacao(porta, no_chao, janela, nao_tem)).
situacao(porta, no_chao, janela, nao_tem)
apanha_banana
sobe_banco
falha
empurra_banco(P1, P2)
falha
anda(porta, P2)
falha
sobe_banco
retrocesso
anda(janela, P2)
falha
falha
apanha_banana
falha
empurra_banco(janela, P2)
empurra_banco(janela, P2)
falha
PROLOG - 28
Leitura procedimental do
programa
?- cumpre_obj(situacao(porta, no_chao, janela, nao_tem)).
situacao(porta, no_chao, janela, nao_tem)
apanha_banana
falha
sobe_banco
empurra_banco(P1, P2)
falha
anda(porta, P2)
falha
P2 = janela
sobe_banco
situacao(P2, sobre_banco, P2, nao_tem)
apanha_banana
P2 = centro
PROLOG - 29
Leitura Procedimental
n
1: apanhar a banana
2: subir ao banco
3: empurrar o banco
4: andar
E se a aco Andar estivesse em primeiro lugar?
PROLOG - 30
Leitura Procedimental
Se a aco Andar estivesse em primeiro lugar,
o Prolog no conseguia encontrar uma soluo :-(
n
1: empurrar o banco
2: apanhar a banana
3: subir ao banco
4: andar
PROLOG - 31
Leitura Procedimental
n
Como fazer?
Construir o programa de forma declarativa
n Procurar, no entanto, colocar em primeiro
lugar as clusulas com cabea mais
prxima de uma soluo final
n Se necessrio, reordenar posteriormente
as clusulas
n
PROLOG - 32
Depurao (debugging)
n
fail
Programa
exit
redo
PROLOG - 33
Depurao (debugging)
n
Ex.:
dia_bonito:- quente.
dia_bonito:- esta_sol, nao_ha_vento.
quente:- temp(T), T > 20.
nao_ha_vento:- vel_vento(V), V<5.
esta_sol. temp(15).
vel_vento(3).
dia_bonito
c
c
temp
c
e
c
e
ECI, Amlcar Cardoso
c
e
<
quente
esta_sol
c
e
vel_vento
<
nao_ha_vento
PROLOG - 34
Depurao (debugging)
dia_bonito
c
c
temp
e
c
r
f
<
quente
e
?- debug.
yes
??- dia_bonito.
call: dia_bonito
call: quente
call: temp(T)
exit: temp(15)
call: 15 > 20
fail: 15 > 20
redo: temp(T)
fail: temp(T)
fail: quente
ECI, Amlcar Cardoso
c
e
c c
e
c
e
esta_sol
vel_vento
<
nao_ha_vento
call: esta_sol
exit: esta_sol
call: nao_ha_vento
call: vel_vento(V)
exit: vel_vento(3)
call: 3 < 5
exit: 3 < 5
exit: nao_ha_vento
exit: dia_bonito
yes
PROLOG - 35