Upload
felicia-de-lucia
View
243
Download
0
Embed Size (px)
Citation preview
8/17/2019 Sintaxe Prolog
1/51
Aula 2 – Programação LógicaSintaxe Prolog
Profa. Elaine FariaUFU - 201
8/17/2019 Sintaxe Prolog
2/51
!r"#ito$% & material a $eguir con$i$te #e
a#a'taç(e$ e exten$(e$ #o$ originai$gentilmente ce#i#o$ 'elo Prof. Alex$an#roSanto$ Soare$
% Agra#ecimento e$'ecial ao Prof. )a*riel!outin+o ,ue auxiliou na confecção #o
material
8/17/2019 Sintaxe Prolog
3/51
ntro#ução% Linguagen$ ,ue utiliam o 'ara#igma lógico $ão
cla$$ifica#a$ com /eclaratia$ – /e$creem o 'ro*lema e não a $olução
– /e$creem & UE #ee $er feito e não !&& #ee
$er feito – !onceito #e un#o Fec+a#o
% /e$cree o 'ro*lema atra"$ #e FA3&S e 4E)4AS
% 4ealia-$e !&5SUL3AS ,ue #eerão $er re$'on#i#a$ 'elointer'reta#or aalian#o-$e o$ fato$ e regra$ #e$crito$
% 3u#o o ,ue o inter'reta#or não $ou*er ter6 uma re$'o$tanegatia
8/17/2019 Sintaxe Prolog
4/51
ntro#ução% Princi'al linguagem #e 'rogramação #o
'ara#igma #e 'rogramação lógico P4&L&)% Prolog 7 Programming in Logic
– Linguagem #e 'rogramação utilia#a 'ara re$oler
'ro*lema$ enolen#o objetos e relações entreo*8eto$
– Ex9Ex're$$ar em Prolog o fato :;oão go$ta #e aria
8/17/2019 Sintaxe Prolog
5/51
A'licaç(e$ #a Programação Lógica% Si$tema$ @a$ea#o$ em !on+ecimento
– Si$tema$ ,ue a'licam mecani$mo$ automatia#o$ #e raciocnio'ara a re're$entação e inferBncia #e con+ecimento
% @anco$ #e /a#o$ :nteligente$< – Si$tema$ ,ue em'regam :agente$< #e *u$ca #e #a#o$ com
*a$e em crit"rio$
% Si$tema$ E$'eciali$ta$ – Si$tema$ ,ue emulam a e$'ecialiação +umana em algum
#omnio e$'ecfico.
% Proce$$amento #a Linguagem 5atural – U$a#a 'ara #e$enolimento #e ferramenta$ 'ara acomunicação +omem-m6,uina em geral e 'ara a con$trução #einterface$
8/17/2019 Sintaxe Prolog
6/51
A'licaç(e$ #a Programação Lógica% n#C$tria #e aiação= em $oluç(e$ #e
'lane8amento e e$calonamento – !oor#ena 20D #o tr6fego a"reo #o mun#o
% n$tituto 5acional #e eteorologia >5E3? – Prei$ão #o tem'o
% o#elagem am*iental
– o#elo$ matem6tico$ 'ara a $imulação #o#e$enolimento #e flore$ta$
8/17/2019 Sintaxe Prolog
7/51
A'licaç(e$ #a Programação Lógica% Log$tica
– Soluç(e$ ótima$ em tem'o-real 'ara um fluxocontnuo #e or#en$ #e $eriço
% ineração #e #a#o$
– @u$ca autom6tica em *anco$ #e #a#o$ 'or'a#r(e$ e relacionamento$ $ignificante$
% !on$trução #e com'ilare$ – Erlang " uma linguagem cria#a 'ela Eric$$on
cu8a 'rimeira er$ão foi feita em Prolog
8/17/2019 Sintaxe Prolog
8/51
#"ia *6$ica #o Prolog% /e$creer a $ituação #e intere$$e
% Faer uma 'ergunta% Prolog #e#u logicamente noo$ fato$
$o*re a $ituação ,ue nó$ #e$creemo$% Prolog retorna $ua$ #e#uç(e$ como
re$'o$ta$
8/17/2019 Sintaxe Prolog
9/51
!on$e,uBncia$% Pen$ar #eclaratiamente= não
'roce#imentalmente – /e$afia#or
– 4e,uer uma mentali#a#e #iferente
% Linguagem #e alto nel – 5ão tão eficiente ,uanto= #igamo$= !
– @om 'ara 'rototi'agem r6'i#a – til em muita$ a'licaç(e$ #e A
8/17/2019 Sintaxe Prolog
10/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
-
8/17/2019 Sintaxe Prolog
11/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- mul+er>maria?.
8/17/2019 Sintaxe Prolog
12/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- mul+er>maria?.
true
-
8/17/2019 Sintaxe Prolog
13/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- mul+er>maria?.
true
- toca)uitarra>8oana?.
8/17/2019 Sintaxe Prolog
14/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- mul+er>maria?.
true
- toca)uitarra>8oana?.true
-
8/17/2019 Sintaxe Prolog
15/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- mul+er>maria?.
true
- toca)uitarra>8oana?.true
- toca)uitarra>maria?.
fal$e
8/17/2019 Sintaxe Prolog
16/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- tatua#a>8oana?.
8/17/2019 Sintaxe Prolog
17/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- tatua#a>8oana?.
E44&49 're#icate tatua#aG1 not #efine#.
-
8/17/2019 Sintaxe Prolog
18/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- fe$ta.
8/17/2019 Sintaxe Prolog
19/51
@a$e #e !on+ecimento 1% mul+er>maria?.
% mul+er>8oana?.
% mul+er>iolan#a?.
% toca)uitarra>8oana?.
% fe$ta.
- fe$ta.
true
-
8/17/2019 Sintaxe Prolog
20/51
ntro#ução
% & 'rolog " *a$ea#o em9 – Fato$
– 4egra$
– !on$ulta$
8/17/2019 Sintaxe Prolog
21/51
Programa Prolog% Fato$
– São enten#i#o$ como relaç(e$ entre o*8eto$ – !on$tituem-$e #e afirmaç(e$ ,ue $ão feita$
ao Prolog
– São er#a#e$ na$ ,uai$ a Prolog ir6 *a$ear-$e 'ara re$'on#er a$ con$ulta$ $olicita#a$
– Ex9 6rore genealógica
8/17/2019 Sintaxe Prolog
22/51
Programa Prolog% Fato$ – cont.
'rogenitor>maria= 8o$e? Fonte9 Lui$= A. . Palao= ntro#ução H ProgramaçãoProlog= E#ucat= 1IIJ
8/17/2019 Sintaxe Prolog
23/51
Programa Prolog% 4egra$
– E$'ecificação #e algo ,ue 'o#e $erer#a#eiro $e alguma$ con#iç(e$ forem$ati$feita$
– K com'o$ta #e #ua$ 'arte$9 !onclu$ão>e$,uer#a? e con#ição >#ireita?
– Exem'lo9 4elação Fil+o.% fil+o>=M? 9- 'rogenitor>M=?.
8/17/2019 Sintaxe Prolog
24/51
Programa Prolog% !on$ulta$
– ue$tionamento$ ,ue $erão re$'on#i#o$aalian#o-$e o$ fato$ e regra$
% ;oão " fil+o #e ;o$" fil+o>8oão= 8o$"?.
% uem " o fil+o #e ;o$" fil+o>= 8o$"?.% uem $ão o$ fil+o$ #e ;oão fil+o>=8oão?.
– " uma ari6el ,ue re're$enta um o*8eto
#e$con+eci#o – Nari6ei$ $ão e$crita$ com a 'rimeira letra em maiC$culo
8/17/2019 Sintaxe Prolog
25/51
@a$e #e con+ecimento 2
'rogenitor>maria= 8o$"?.'rogenitor>8oão= 8o$"?.'rogenitor>8oão= ana?.
'rogenitor>8o$"=8Clia?.'rogenitor>8o$"= ri$?.'rogenitor>ri$=8orge?.
fil+o>=M? 9- 'rogenitor>M=?.
fato
regra
cabeça corpo
8/17/2019 Sintaxe Prolog
26/51
@a$e #e con+ecimento O% feli>iolan#a?.
% e$cutamu$ica>maria?.
% e$cutamu$ica>iolan#a?9- feli>iolan#a?.
% toca)uitarra>maria?9- e$cutamu$ica>maria?.
% toca)uitarra>iolan#a?9- e$cutamu$ica>iolan#a?.
-
8/17/2019 Sintaxe Prolog
27/51
@a$e #e con+ecimento O% feli>iolan#a?.
% e$cutamu$ica>maria?.
% e$cutamu$ica>iolan#a?9- feli>iolan#a?.
% toca)uitarra>maria?9- e$cutamu$ica>maria?.
% toca)uitarra>iolan#a?9- e$cutamu$ica>iolan#a?.
- toca)uitarra>maria?.
true
-
8/17/2019 Sintaxe Prolog
28/51
@a$e #e con+ecimento O% feli>iolan#a?.
% e$cutamu$ica>maria?.
% e$cutamu$ica>iolan#a?9- feli>iolan#a?.
% toca)uitarra>maria?9- e$cutamu$ica>maria?.
% toca)uitarra>iolan#a?9- e$cutamu$ica>iolan#a?.
- toca)uitarra>maria?.
true
- toca)uitarra>iolan#a?.true
8/17/2019 Sintaxe Prolog
29/51
!l6u$ula$% feli>iolan#a?.
% e$cutamu$ica>maria?.
% e$cutamu$ica>iolan#a?9- feli>iolan#a?.
% toca)uitarra>maria?9- e$cutamu$ica>maria?.
% toca)uitarra>iolan#a?9- e$cutamu$ica>iolan#a?.
Existem cinco cláusulas nesta base de conhecimento:
dois fatos e três regras.
O final de uma cláusula é marcado com um onto final.
8/17/2019 Sintaxe Prolog
30/51
Pre#ica#o$% feli>iolan#a?.
% e$cutamu$ica>maria?.
% e$cutamu$ica>iolan#a?9- feli>iolan#a?.
% toca)uitarra>maria?9- e$cutamu$ica>maria?.
% toca)uitarra>iolan#a?9- e$cutamu$ica>iolan#a?.
Existem três predicados nesta base de
conhecimento:
feli!" escuta#musica e toca$uitarra
8/17/2019 Sintaxe Prolog
31/51
@a$e #o !on+ecimento % feli>icente?.
% e$cutamu$ica>*runo?.
% toca)uitarra>icente?9- e$cutamu$ica>icente?= feli>icente?.
% toca)uitarra>*runo?9- feli>*runo?.
% toca)uitarra>*runo?9- e$cutamu$ica>*runo?.
8/17/2019 Sintaxe Prolog
32/51
@a$e #o !on+ecimento % feli>icente?.
% e$cutamu$ica>*runo?.
% toca)uitarra>icente?9- e$cutamu$ica>icente?= feli>icente?.
% toca)uitarra>*runo?9- feli>*runo?.
% toca)uitarra>*runo?9- e$cutamu$ica>*runo?.
A vírgula “," expressa conjunção em Prolog
8/17/2019 Sintaxe Prolog
33/51
Ex're$$an#o /i$8unção% feli>icente?.
% e$cutamu$ica>*runo?.
% toca)uitarra>icente?9- e$cutamu$ica>icente?= feli>icente?.
% tocaGuitarra(bruno):- feliz(bruno).
% tocaGuitarra(bruno):- escuta_musica(bruno).
feli>icente?.
e$cutamu$ica>*runo?.
toca)uitarra>icente?9- e$cutamu$ica>icente?= feli>icente?.tocaGuitarra(bruno):- feliz(bruno); escuta_musica(bruno).
8/17/2019 Sintaxe Prolog
34/51
Prolog e Lógica% Prolog tem algo a er com lógica
% &'era#ore$ – m'licação :-
– !on8unção ,
– /i$8unção ;
% U$o #o modus onens
% 5egação
8/17/2019 Sintaxe Prolog
35/51
@a$e #o !on+ecimento Q% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
8/17/2019 Sintaxe Prolog
36/51
Nari6ei$ em Prolog% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
8/17/2019 Sintaxe Prolog
37/51
n$tanciação #e Nari6ei$% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
7maria
8/17/2019 Sintaxe Prolog
38/51
Solicitan#o Alternatia$% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
7mariaR
8/17/2019 Sintaxe Prolog
39/51
Solicitan#o Alternatia$% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
7mariaR78oana
8/17/2019 Sintaxe Prolog
40/51
Solicitan#o Alternatia$% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
7mariaR78oanaR
7iolan#a
8/17/2019 Sintaxe Prolog
41/51
Solicitan#o Alternatia$% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- mul+er>?.
7mariaR
78oanaR
7iolan#a.
8/17/2019 Sintaxe Prolog
42/51
@a$e #o !on+ecimento Q% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- ama>marcelo=?= mul+er>?.
8/17/2019 Sintaxe Prolog
43/51
@a$e #o !on+ecimento Q% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- ama>marcelo=?= mul+er>?.
7maria.
-
8/17/2019 Sintaxe Prolog
44/51
@a$e #o !on+ecimento Q% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- ama>a*o*rin+a=?= mul+er>?.
8/17/2019 Sintaxe Prolog
45/51
@a$e #o !on+ecimento Q% mul+er>maria?.% mul+er>8oana?.
% mul+er>iolan#a?.
% ama>icente= maria?.% ama>marcelo= maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
- ama>a*o*rin+a=?= mul+er>?.
fal$e-
8/17/2019 Sintaxe Prolog
46/51
@a$e #o !on+ecimento % ama>icente=maria?.
% ama>marcelo=maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
% temciume$>=M?9- ama>=T?= ama>M=T?.
8/17/2019 Sintaxe Prolog
47/51
@a$e #o !on+ecimento % ama>icente=maria?.
% ama>marcelo=maria?.
% ama>a*o*rin+a= coel+in+o?.% ama>coel+in+o= a*o*rin+a?.
% temciume$>=M?9- ama>=T?= ama>M=T?.
- temciume$>marcelo=?.
8/17/2019 Sintaxe Prolog
48/51
@a$e #o !on+ecimento % ama>icente=maria?.
% ama>marcelo=maria?.
% ama>a*o*rin+a= coel+in+o?.
% ama>coel+in+o= a*o*rin+a?.
% temciume$>=M?9- ama>=T?= ama>M=T?.
- temciume$>marcelo=?.
7icenteR
7marceloRfal$e.
-
8/17/2019 Sintaxe Prolog
49/51
@a$e #o !on+ecimento J% @a$e #e fato$9 ual o re$ulta#o #a$ $eguinte$
'ergunta$go$ta>8oao= 'eixe?. - go$ta>maria=?.go$ta>8oao=maria?. - go$ta>=liro?.
go$ta>maria=liro?. - go$ta>uem=&,ue?.go$ta>'e#ro=liro?. - go$ta>=M?.go$ta>maria=flor?. - go$ta>=?.go$ta>maria=in+o?. - go$ta>a=*?.
- go$ta>A='eixe?.
8/17/2019 Sintaxe Prolog
50/51
Prolog% !oment6rio em Prolog
– Lin+a9 D – @loco9 GV ..... VG
8/17/2019 Sintaxe Prolog
51/51
4eferBncia$% Lui$= A. . Palao= ntro#ução H
Programação Prolog= E#ucat= 1IIJ.