Sintaxe Prolog

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.