04 Prolog Ling

download 04 Prolog Ling

of 93

Transcript of 04 Prolog Ling

  • 8/18/2019 04 Prolog Ling

    1/93

    Slides adaptados a partir de slides obtidos na Internet e de slides criados pelo Prof. WagnerTeixeira da Silva

    1

    Linguagem PrologConceitos Básicos

    Turma A

    Prof. Marcelo LadeiraCIC/UnB

  • 8/18/2019 04 Prolog Ling

    2/93

    2

    Estrutura de um Programa PrologTermos

    Usados para construir programas eestruturas de dados

    Tipos – constantes inteiros reaisátomos

     – no so !ariá!eis podem ser !istos como strings constantes

     – !ariá!eis – termos compostos

  • 8/18/2019 04 Prolog Ling

    3/93

    "

    Estrutura de um Programa PrologConstantes

    Atomos e n#meros so definidos so$re os caracteres%A&B&..&'a&$&...&()&*&...&+caracteres especiais como , - / 0 1 % . 3 4

    Atomos – strings de letras& d5gitos e o underscore& iniciando com MI678CULA

    anna 932: nil – string de caracteres especiais

    * . = @ # $

     – ;tomos especiais %%11 .%. Tom? >930%?

    6#meros – reais% ".*@ -).: *.2" *.2"@ – inteiros% 2" ::" -@2

  • 8/18/2019 04 Prolog Ling

    4/93

    Por quê?@

    Estrutura de um Programa Prologariá!eis

    Iniciam com mai#scula ou underscore – seguido de DualDuer n#mero de letras& digitos ou

    3F  G32:3cHica G Barao red

     – !ariá!el anJnima Kpense como no importaFum simples underscore

     HascHildKG %- parentKG&3.

    comportamento igual ou diferente NliOesKmar&3& liOesK3&mar.

    liOesKmar&G& liOesKG&mar.

  • 8/18/2019 04 Prolog Ling

    5/93

    :

    Estrutura de um Programa PrologTermo Composto

    ;tomo seguido por uma seDQRncia de um ou maistermos& entre parenteses e separados por !5rgulaparentKpam&$o$.

    deseSaKestudante&passarKlp&2)*"&2. – enore9 no uma funVo

     – estrutura de dados Ktipo um registro

     – E9emplo entradas !ia modo interpretador 

    assertKdataK*& no!em$ro& 2)*2.dataKia& no!em$ro& 2)*2.

    ia 1 *

    data

    2012novembro17

  • 8/18/2019 04 Prolog Ling

    6/93

    W

    Estrutura de um Programa Prolog

    Cláusulas Prolog – atos& regras ou consultas

    Base de conHecimentos KBC

     – fatos – regras

    arDui!o te9to – carregado !ia consultKarDui!o-te9to.F

    Prompt interpretador  – consultas

    BC modificada !iaassert Kinsere fato ou regraretractKelimina fato ou regra

  • 8/18/2019 04 Prolog Ling

    7/93

    Estrutura de um Programa PrologefiniVo ormal

    fato0 %%1 fa0. X fa significa fYrmula atJmicaregra0 %%1 fa)0 %- fa*0& ... & fa60.consulta0 %%1 fa*0& ... & fa60.

    fa0 %%1 predicado0Ktermo*0& ... & termo60 Zop3prfi9ado0 termo*0 termo20 Ztermo*0 op3infi9ado0 t20 Ztermo*0 termo20 op3pYsfi9ado0

    predicado0 %%1 átomo0termo0 %%1 constante0 Z !ariá!el0 Z t3composto0constante0 %%1 átomo0 Z inteiro0 Z n#mero3real0t3composto0 %%1 átomo0Klista3termos0lista3termos0 %%1 termo0Ztermo0&lista3termos0

  • 8/18/2019 04 Prolog Ling

    8/93[

    ConstruV\es Básicas

    atos Uni!ersais – atos com !ariá!eis uni!ersalmente Duantificadas. – unctor e átomo iniciam com letra min#scula.

    Programa Prolog% atos e ]egrasmaisK)&G&G. X fato

    maisKA&B&C %- C is A , B. X regra

    !e(esK*&G&G. X fato

    !e(esKA&B&C %- C is A B. X regra ariá!el

     – Está associada a um indi!5duo no especificado& umaincYgnita de !alor #nico. ^ local a uma sentenVa.

  • 8/18/2019 04 Prolog Ling

    9/93+

    Usando o Prolog

    Para usar o Prolog !ocR precisa sa$er% – In!ocar o Prolog – 8air do Prolog%

    ' Halt. Kretorna ao cHamador

     – Usar um editor para editar um programa – Carregar um programa

    load ou load3filesKarDui!o. X fonte ou o$Seto consultKarDui!o. X fonte consultKuser. X carrega !ia teclado. im ' reconsultKarDui!o. X recarrega arDui!o

  • 8/18/2019 04 Prolog Ling

    10/93*)

    Usando o Prolog

    Capacidade especial Kde algumasimplementaV\es – Arma(enar o atual BC em arDui!o

    sa!eKarDui!o. X sal!a a BC no arDui!o& o$Setosa!e3predicatesKpredicados& arDui!o.

    X sal!a os predicados em arDui!o& cYdigo

     – ]ecuperar o arDui!o sal!o restoreKarDui!o. X recupera o cYdigo o$Seto load ou load3filesKarDui!o. X o$Seto

  • 8/18/2019 04 Prolog Ling

    11/93**

    ato

    ]elaVo !erdadeira entre termos& !ia predicado. – E9.% gostaKSoao& cer!eSa.

      gostaKSoao& maria. ato uma cláusula sem nenHuma condiVo. 8inta9e de predicado

     – functor0 Kt*&t2&...&tn.Predicado e9pressa uma relaVo entre termos.

    Aridade – _uantidade de termos no predicado. E9pressa por functor0/aridade.

    E9.% gosta/2 ou gosta/" – Predicados com mesmo functor podem ter diferentes aridades%

    gostaKSoao& ler& li!ros.gostaKSoao&maria.

  • 8/18/2019 04 Prolog Ling

    12/93*2

    ]egra

    ca$eVa %- corpo. – o operador %-F denominado pescoVo KnecO

    meta %- sm*& sm2&...& smO – meta sY !erdadeira se suas su$metas tam$m o

    forem. – para pro!ar Due meta !erdadeira& de!e-se pro!ar

    antes Due suas su$metas tam$m so. – meta e su$metas so relaV\es predicati!as entre

    termos. – termos nomeiam o$Setos do discurso.

  • 8/18/2019 04 Prolog Ling

    13/93*"

    ConsultaMeio de ]ecuperar InformaV\es em Prolog

    E9emplo%paiKSoao&mane.

      paiKSoao& (e.paiKSoao& Duim.

    paiKmane&maria.→  paiK(e& (efa.

    paiK(e& rutH.

    irmasKA&B %- paiKP&A&paiKP&B& A`11B.

    a!oKA&6 %- paiKP&6& paiKA&P.tioKT&8 %- paiKP&8& irmasKP&T.

    N- paiKP&(efa.P 1 (e

    N- irmasKDuim&A.A 1 mane

    A 1 (e false.

    N- tioKT&(efa.T 1 mane T 1 Duim false.

    N- a!oKA&6.A 1 Soao & 6 1 maria A 1 Soao & 6 1 (efa A 1 Soao & 6 1 rutH false.

  • 8/18/2019 04 Prolog Ling

    14/93*@

    ConsultaMeio de ]ecuperar InformaV\es em Prolog

    ]esponder a uma consulta determinar se ela umaconseDQRncia do programa Ka9iomas da teoria.

    Consulta e9istencial

    N- maisK"&G&[. X e9iste um G , " 1 [NN- paiKP&Soao. X e9iste um P pai de SoaoN

    Consulta conSunti!a e !ariá!eis coti(adasN paiKSoao& & paiK&6. X_uem so os netos de SooN

    N tioKT&P& paiKP&maria. X _uem o tio a!Y de MariaN

  • 8/18/2019 04 Prolog Ling

    15/93*:

    E9emplo%paiKSoao&mane.

      paiKSoao& (e.

    paiKSoao& Duim.paiKmane&maria.

     paiK(e& (efa.

    paiK(e& rutH.

    irmasKA&B %- paiKP&A&paiKP&B& A`11B.

    a!oKA&6 %- paiKP&6& paiKA&P.

    tioKT&8 %- paiKP&8& irmasKP&T.

    ?- pai(P,zefa).

    P = ze

    ?- pai(ze, F)

    F = zefa ;

    F=ruth;false.

    ?- tio(T,zefa).

    T = ae ;

    T = "ui ;

    false.?- ao(,%).

    = &oao , % = aria ;

    = &oao , % = zefa ;

    = &oao , % = ruth ;

    false.

    Predicados Bidirecionais

  • 8/18/2019 04 Prolog Ling

    16/93*W

    Predicados Bidirecionais

    concatK

  • 8/18/2019 04 Prolog Ling

    17/93*

    ]elaV\es

    mem$roKG&

  • 8/18/2019 04 Prolog Ling

    18/93*[

    Predicado Unidirecional

    fatK)&*%-.fatK*&*%-.fatK6& %- 6* is 6 - *& fatK6*&*& is 6 *.

    N- fatK)&. 1 *

    N- fatK:&. 1 *2)

    N- fatK:&*2).true.

    N- fatK:&*)).false.N- fatK6&*2).E]]]% is/2% Arguments are not sufficientl instantiated

  • 8/18/2019 04 Prolog Ling

    19/93*+

    Predicado Unidirecional

    fi$K6& %- fi$9K6&*&*&& .fi$9K)&A&3&A.fi$9K6&A&B& %- 6* is 6 - *& AB is A , B& fi$9K6*&B&AB&.

    N- fi$K)&. 1 *

    N- fi$K*&*.true.

    N- fi$K*)&. 1 [+

    N- fi$K2)&.

    1 *)+@WN- fi$K*))&. 1 :"*@[@@)*"[*)[@*)*.

    N- fi$K6&*.6 1 )

    N- fi$K6&[+.E]]]% Arguments are not sufficientl instantiated

  • 8/18/2019 04 Prolog Ling

    20/93

    2)

    Termos Kata o$Sects

  • 8/18/2019 04 Prolog Ling

    21/93

    2*

    Termo

    6omeia entidades do uni!erso do discurso. termo0 %%1 simples0Ztermo composto0 simples0 %%1 constante0Z!ariá!el0 !ariá!el0 %%1 3 Zmai#scula0Z!ariá!el0letra0Z

      !ariá!el0d5gito0Z !ariá!el03 !ariá!el

    E9.% G 3 39 A!o ente *2 Pai3sangue 3$ – ^ uma incYgnita. esigna uma entidade at o momento

    desconHecida.

  • 8/18/2019 04 Prolog Ling

    22/93

    22

    Termo6o-ariá!el

    constante0 %%1 átomo0 Z n#mero0 – á o predicado atomic(Termo Due retorna true 

    Duando o Termo atJmico& no estruturado.

    n#mero0 %%1 inteiro0 Z real0E9.% @& -*)& :."& ).*2"E-*)& -*."2e*)2 – pode ser reconHecido por number(X .

     – operadores-relacionais0 %%1 Z 1 Z 1 Z 01 Z 0 – aritmtica0 %%1 aritmtica-genrica0 Z

      aritmtica $itise0

  • 8/18/2019 04 Prolog Ling

    23/93

    2"

    Aritmtica em Prolog

    E9emplosG is *,2.

    G 1 ".

    G is ceilingK 2.* .G 1 ".

    G is ceilingK -2.*.G 1 -2.

  • 8/18/2019 04 Prolog Ling

    24/93

    2@

    peradores Aritmticos

    6ome/aridade E9plicaVoa$s / * !alor a$soluto KI8, / 2 adiVo KI8acos / * arco cosseno

    asin / * arco senoatan / * arco tangente KI8

     /` / 2 and $it a $it KI8 ` / * $it complement KI8 / 2 sHift $it a $it para a esDuerda KI8

     `/ / 2 or $it a $it KI800 / 2 sHift $it a $it para a direita KI8ceiling / * menor inteiro no menor Due KI8cos / * cosseno KI8cosH / * cosseno Hiper$Ylico

  • 8/18/2019 04 Prolog Ling

    25/93

    2:

    peradores Aritmticos

    6ome/aridade E9plicaVoe / ) n#mero 2.*[2[. . .

    e9p / * ee9p KI8

    / 2 e9ponenciaVo KI8float / * con!erso para float KI8

     / / 2 di!iso KI8

    inde9 / " locali(a su$string em string

     // / 2 di!iso inteira KI8

    random / * gera n#mero aleatYrio inteiro

    floor / * maior inteiro no maior Due

    lengtH / * comprimento da string

  • 8/18/2019 04 Prolog Ling

    26/93

    2W

    peradores Aritmticos

    6ame/arit E9planationlog / * logaritmo neperiano KI8log*) / * logaritmo decimalmod / 2 mYdulo de di!iso inteira KI8

    / 2 multiplicaVo KI8pi / ) n#mero ".*@*:+. . .rem / 2 resto de di!iso inteira KI8round / * inteiro mais prY9imo KI8sign / * retorna -*& ) ou ,* KI8

    - / * in!erte o sinal KI8sin / * seno KI8sinH / * seno Hiper$YlicosDrt / * rai( Duadrada KI8

  • 8/18/2019 04 Prolog Ling

    27/93

    2

    peradores Aritmticos

    6ame/arit E9planation- / 2 su$traVo KI8

    tan / * tangente

    tanH / * tangente Hiper$Ylica

    truncate / * parte inteira de um real KI8

  • 8/18/2019 04 Prolog Ling

    28/93

    2[

    peradores Aritmticos

    peradores aritmticos Due forVam Prolog aa!aliar uma e9presso como uma e9pressoaritmtica – perator / arit E9planation

    / 2 menor do Due KI8

    0 / 2 maior do Due KI8

    1 / 2 menor ou igual a KI8

    01 / 2 maior ou igual KI81`1 / 2 diferente KI8

    1%1 / 2 igual KI8

  • 8/18/2019 04 Prolog Ling

    29/93

    2+

    A!aliador de E9press\es

    G is EG !ariá!el no ligada. E e9presso aritmtica.

    E* op E2 – nde op ∈ & 1& 01& 0& 1%1& 1`1h –

    E* e E2 so e9press\es aritmticas a!aliadas antes dacomparaVo.N- G 1 2& b 1 :& ] is sDrtKG2,b.

    G 1 2. b 1 :.] 1 "

    N- G 1 2& b 1 :& b - G 1`1 G.G 1 2.

     b 1 :N- G 1 2& b 1 :& b - G b& riteKoO&nl.

    oOG 1 2.

     b 1 :

  • 8/18/2019 04 Prolog Ling

    30/93

    ")

    A!aliador de E9press\esE9emplo

    N- rai(es.Duer acHar as rai(es de a99,$9,c NKs/n

    Informe coef a 0 *.Informe coef $ 0 *.

    Informe coef c 0 -*2.9* 1 "92 1 @

    Duer acHar as rai(es de a99,$9,c N Ks/nInforme coef a 0 *.Informe coef $ 0 *.

    Informe coef c 0 *2.6ao tem rai(es reais

    Duer acHar as rai(es de a99,$9,c N Ks/nfalse.

  • 8/18/2019 04 Prolog Ling

    31/93

    "*

    A!aliador de E9press\esE9emplo

    rai(es%- sim6aoKDuer acHar as rai(es de a99,$9,c N&o$temcoefKA&B&C&

      is B2-@AC&  K 01 )& G* is K-B , sDrtK/K2A&  G2 is K-B - sDrtK/K2A& nl&

    riteK9* 1 & riteKG*& nl&  riteK92 1 & riteKG2  )& nl& riteK6ao tem rai(es reais. &  rai(es.sim6aoKMsg %- nl& riteKMsg& repeat&

    riteK> Ks/n% &get3cHarK6& nl& mem$erK6&

  • 8/18/2019 04 Prolog Ling

    32/93

    "2

    ;tomo

    ;tomos so nomes te9tuais usados para identificardados& predicados& operadores& mYdulos& arDui!os&

     Sanelas& etc. Pode ser reconHecido pelo predicadoatomKG.

    átomo0 %%1 átomo-alfa0Zátomo-sim$0Z string0  átomo-apostrofado0 Zátomo-especial0átomo-alfa0 %%1 letra-min#scula0 Z átomo-alfa0letra0Z

    átomo-alfa0d5gito0 Z átomo-alfa0 3E9emplos.% a& a!o& amora& a2& a3& $ig3"2& 9Ma9& etc.

    átomo-sim$0 %%1 caracter-sim$0Z  atomo sim$0caracter-sim$0caracter-sim$0 %%1 jZkZXZZZ,Z-Z.Z/Z%ZZ1Z0ZZ`ZZZ 4 –  E9emplos.% % ,, 00 -- .. -/

      $s.% desde Due no seSa operador primiti!o

  • 8/18/2019 04 Prolog Ling

    33/93

    ""

    ;tomo

    átomo-apostrofado0 %%1DualDuer seDQRncia de caracteres

     – E9emplo% A!o *2" alo mundo a – Um caracter em si um átomo& e9emplo% 9

    string0 %%1 DualDuer seDQRncia de caracteres

  • 8/18/2019 04 Prolog Ling

    34/93

    "@

    ;tomo

    átomo especial0 %%1 Z

  • 8/18/2019 04 Prolog Ling

    35/93

    ":

    Termo Composto

    termo-composto0 %%1 lista0 Zestrutura0

     – Pode ser identificado por predicado%compoundKG

     –

    8u$tiposListasEstruturas

  • 8/18/2019 04 Prolog Ling

    36/93

    "W

    Lista

    ^ uma seDQRncia de termos entre colcHetes &separados por !5rgulas% – E9emplos%

  • 8/18/2019 04 Prolog Ling

    37/93

    "

    Lista

    PredicadostaOeK)&3&

  • 8/18/2019 04 Prolog Ling

    38/93

    "[

    Lista

    dropK)&Gs&Gs.

    dropK3&

  • 8/18/2019 04 Prolog Ling

    39/93

    "+

    Estrutura

    ^ semelHante a um registro& com tipo& nome& ecampos. Com sinta9e geralnomeKt*&t2&...&tn&

    nome/n E9emplo%

    temK$ce& li!roKCapitaes de Areia& orge Amado

    aKgoania& $rasilia& 2))pessoaKnomeK>oca Estrada?& idadeK@2&  filHosKoao Sr?& >Amauri erreir?&  >Milene erreira?=

  • 8/18/2019 04 Prolog Ling

    40/93

    @)

    peradores

    moduleKif&

  • 8/18/2019 04 Prolog Ling

    41/93

    @*

    peradores

    N- G 1 *2& se G1*) entao b1*.false.

    N- G 1 *2& se G1*) entao b1* senao b 1 2.G1*2&

     b12.

    N- G 1 *)& se G1*) entao b1* senao b 1 2.

    G1*)& b1*.

  • 8/18/2019 04 Prolog Ling

    42/93

    @2

    peradores

    Especifier Class Associati!el

     f9 prefi9 non-associati!e

     f prefi9 rigHt-associati!e

     9f9 infi9 non-associati!e 9f infi9 rigHt-associati!e

     f9 infi9 left-associati!e

     9f postfi9 non-associati!e f postfi9 left-associati!e

  • 8/18/2019 04 Prolog Ling

    43/93

    @"

    peradores

    Priorit' peifier perator(s)

     1+ f -

     1+ f -

     11 f' ;

     1/ f' -0 1 f' ,

      f' 23

     4 f =, 2=

     4 f ==, 2==, @5, @=5, @0, @0=

     4 f is, ==, =2=, 5, =5, 0, 0= / 'f 3, -, 62, 26

     7 'f *, 6, 66, re, o8, 55, 00

     + f **

     + f' 9

     + f' -, 2

  • 8/18/2019 04 Prolog Ling

    44/93

    @@

    peradores

    Priorit 8pecifier peratorKs *))) 9f Z

     +)) f not

     )) 9f9 is3string

     W)) f9

     2)) f ,

  • 8/18/2019 04 Prolog Ling

    45/93

    @:

    Unificando com ariá!el

    !ariá!el com !ariá!elG 1 b

    G unifica com b e retorna true.

    N- G 1 b.G 1 b

     – passam a representar a mesma !ariá!el.

    G `1 b

    retorna sempre false.N- G `1 b.false.

  • 8/18/2019 04 Prolog Ling

    46/93

    @W

    Unificando com ariá!el

    ariá!el em dados estruturados& HáunificaVo se as estruturas forem isomYrficase se Hou!er uma su$stituiVo so$re as

    !ariá!eis Due torne as estruturas idRnticas.N- G 1 arcoKa&$&*).

    G 1 arcoKa&$&*)

    N- li!roKautorKtei9eira& Soao& Titulo 1li!roKAutor&tituloKAmor e Pa(.

    Titulo 1 tituloKAmor e Pa( &

    Autor 1 autorKtei9eira&Soao

  • 8/18/2019 04 Prolog Ling

    47/93

    @

    Unificando com ariá!el

    N-

  • 8/18/2019 04 Prolog Ling

    48/93

    @[

    Unificando Constantes

    T* 1 T2Unificam se ti!erem !alores idRnticos e foremestruturalmente isomYrficos.

    N- *) 1 *).true.N- arcoKa&$&*) 1 arcoKa&$&*).

    true.

    N- agner 1 agner.true.

    N- a $ 1 a $.true.

  • 8/18/2019 04 Prolog Ling

    49/93

    @+

    ComparaVo de Termos Ar$itrários8egundo rdem Padro

    Com os operadores 11/2 KidRnticos& `11/2 &01/2& 0/2 & /2& 1/2

      Tipo ComparaVo – !ariá!eis endereVos – n#meros !alor numrico

     – átomos !alor A8CII

  • 8/18/2019 04 Prolog Ling

    50/93

    :)

    rdem Padro dos Termos

    Com os operadores 11/2 KidRnticos& `11 &01/2& 0/2 & /2& 1/2 – 8egue a ordem

    !ariá!eis flutuantes inteiros átomos strings listas termos-compostos

     – 8e os termos so do mesmo tipo& ento uma

    comparaVo de tipoF feita.

  • 8/18/2019 04 Prolog Ling

    51/93

    :*

    rdem Padro dos TermosE9emplo% Dsort

    separaKB&

  • 8/18/2019 04 Prolog Ling

    52/93

    :2

    rdem Padro dos TermosE9emplo% Dsort

    N- DsortK

  • 8/18/2019 04 Prolog Ling

    53/93

    :"

    Base de ConHecimentos

    → li!roKautorKernando A.& tituloKrientacao a $Setos.li!roKautorKPedro ]e(ende& tituloKCriptografia em ]edes.li!roKautorKLui( rota& tituloK8eguranca em B.li!roKautorKMarcelo Ladeira& tituloK]edes Baesianas.li!roKautorKernando A.& tituloK]edes de Computadores.li!roKautorKMaria Emilia& tituloKenoma umano.li!roKautorKagner Tei9eira& tituloKuncoes de Crenca.li!roKautorKAlui(io Arcela& tituloKComputacao 8onica.li!roKautorKomero Picolo& tituloKComputacao rafica.li!roKautorKMaria de atima& tituloKIA na Educacao.

    li!roKautorKMarco Aurelio& tituloKIA na Educacao de Adultos.li!roKautorKLi eigang& tituloK]edes 6eurais e o Tempo.li!roKautorKrancisco Carta9o& tituloKEspecificacoes ormais.artigoKautorKernando A.& tituloKDuem usa rientacao a $Setos.artigoKautorK>agner Tei9eira& tituloKsoma ortogonal.artigoKautorKAntonio 6uno& tituloKfiltro rafico.

  • 8/18/2019 04 Prolog Ling

    54/93

    :@

    Consulta so$re a Base de Li!ros

    N- li!roKG&b.G 1 autorKernando A. &

     b 1 tituloKrientacao a $Setos G 1 autorKPedro ]e(ende &

     b 1 tituloKCriptografia em ]edes G 1 autorKLui( rota &

     b 1 tituloK8eguranca em B G 1 autorKMarcelo Ladeira &

     b 1 tituloK]edes BaesianasN- li!roKautorKernando A.&b. b 1 tituloKrientacao a $Setos  b 1 tituloK]edes de Computadoresfalse.

    • : u poteiro

    apota8o para o

    orrete fato a o feita ,

    o poteiro atualiza8o

     para refletir o oo fato

    "ue ate8e a soliita>o.

    ua8o o poteiro heAaao fi 8a o orrete

    falha. 

  • 8/18/2019 04 Prolog Ling

    55/93

    ::

    Consulta so$re uma $ase

    BacOtracOing KretrocessoN- artigoKautorKG&3.

    G 1 ernando A.

    G 1 >agner Tei9eira G 1 Antonio 6uno

    N- artigoKautorKG&3& riteKG& nl& fail.ernando A.

    agner Tei9eiraAntonio 6uno

    false.

  • 8/18/2019 04 Prolog Ling

    56/93

    :W

    Incluindo Cláusulas na BC

    assertaKclausula.Inclui uma cláusula na BC& no in5cio das cláusulascom mesmo nome.

    N- dnamicKpai/2.N- assertaKpaiKSoao& maria.

    true.

    N- listingKpai/2.

    %- dnamicKpai/2.paiK Soao& maria .

    true.

  • 8/18/2019 04 Prolog Ling

    57/93

    :

    Incluindo Cláusulas na BC

    assert(Kcláusula - inclui no final dascláusulas de mesmo nome.N- assert(K KirmaoKA&B %- paiKP&A& paiKP&B& A `11 B .

    true.

    N- listingKirmao/2.%- dnamic irmao/2.

    irmaoKA& C %-

      paiKB& A&  paiKB& C&

      A`11C.

    true.

    Observa !e a regra precisa estar

    entre par"ntesis por conta da

     prioridade do operador #$%2 sermaior !e 1000. 

  • 8/18/2019 04 Prolog Ling

    58/93

    call/1 chama o argumento como uma meta a ser avaliada.:[

    Uni!

    perador 1../2F transforma termo em lista – Apenas um dos seus operandos pode ser !ariá!el – E9emplos

    N- structKHello& G 1.. L.L 1

  • 8/18/2019 04 Prolog Ling

    59/93

    :+

    UnificaVo

    ^ o processo Due torna dois termos idRnticos& aindaDue para isso se faVa su$stituiVo de !ariá!eis emtermos por outros termos. –

    o termo t* unifica com o termo t se e9iste uma su$stituiVoθ

    * Due torna t* identico a t Krepresentada por t ≡ t*θ* seSa t& t* e t2 termos& t uma instqncia comum de t* e t2 

    se∃

     θ* e θ2 su$stituiV\es tais Due t ≡ t*θ* e t ≡ t2θ2.

    E9emplo

    t*1 concatK

  • 8/18/2019 04 Prolog Ling

    60/93

    W)

    UnificaVo

    Unificador um unificador de dois termos t e t*  umasu$stituiVo θ Due torna t ≡ t* /θ Kt e t* ficamidRnticos.

    ]egras da unificaVoa !ariá!eis unificam com !ariá!eis

     G 1 b.

    $ !ariá!eis unificam com termos

     G 1 gostaKSoao&ler.c termos unificam com termos& se eles casam paiKP& 1 paiKSoao& (e com θ1KP/Soao& /(e. 2 1 2& Soao 1 >Soao?& etc.

    Continua ...

  • 8/18/2019 04 Prolog Ling

    61/93

    W*

    UnificaVo

    ]egras da unificaVod Um termo no-atJmico unifica com outro se Hou!er

    correspondRncia estrutural.li!roKautorK8n&6&tituloK>Clarissa? 1li!roKautorK>erissimo?&?Erico?& T.

    com θ 1 K8n/?erissimo?& 6/?Erico?& T/tituloK>Clarissa?

    E9ecuVoN- li!roKautorK8n&6&tituloKClarissa 1

    li!roKautorKerissimo&Erico& T.

    8n 1 erissimo &6 1 Erico &

    T 1 tituloKClarissa

  • 8/18/2019 04 Prolog Ling

    62/93

    Pro!a por ]efutaVo

    Moti!aVoBC ⇒ P ⇔  ¬¬KBC ⇒ P

    ⇔  ¬¬K¬BC ∨ P

    ⇔  ¬KBC ∧ ¬P⇔  ¬KBC ∧ ¬P ∨ False

    ⇔  KBC ∧ ¬P ⇒ False

    W2

  • 8/18/2019 04 Prolog Ling

    63/93

    W"

    ]esoluVo

    ^ uma regra de inferRncia

    m1& '1$ '1

    n

    m '1

     p...& p& p...&& p$#r 

    s...&&s$#...p& p...&& p$#r

    ent(o)&*p'% !nificador oonde 

    &ser&& pliteraisosSe'a)

    &)

    1

    ii

    +

    ¬=

    ∨¬∨

    θ 

    bC  A

    C  B B Aa

  • 8/18/2019 04 Prolog Ling

    64/93

    W@

    ]esoluVo

    uas cláusulas de orn so resol!idas emuma no!a cláusula se uma delas conti!er umpredicado negado Due corresponda a umpredicado no-negado na outra cláusula. – Tautologia

    A no!a cláusula elimina o termo decorrespondRncia e fica dispon5!el para usoem resposta a pergunta. – As !ariá!eis so su$stitu5das por constantes

    associadas de maneira consistente

  • 8/18/2019 04 Prolog Ling

    65/93

    E9emplo de ]esoluVo por

    come Kurso& pei9e.come Kurso& raposa. X predicado bináriocome Kca!alo& mato.animal Kurso.animal Kpei9e. X predicado unárioanimal Kraposa.presaKG %- comeKb&G& animalKG.presaKG %- comeKb&G& animalKG. X regra

    Exemplo extraído de slides apresentados pela Profª oseluce de !arias "unha/#!"$W:

  • 8/18/2019 04 Prolog Ling

    66/93

    ]egra de InferRncia% ]esoluVo

    $ser!e Due a regra$ser!e Due a regra KCláusula de ornKCláusula de ornpresaKG %- comeKb&G& animalKGpresaKG %- comeKb&G& animalKG

    CorrespondeCorresponde a ff a ff  

    99 

    KcomeKb&G animalKG -0 presaKGKcomeKb&G animalKG -0 presaKG

    CorrespondeCorresponde a cláusulaa cláusula¬KcomeKb&G animalKG ! presaKGKcomeKb&G animalKG ! presaKG¬comeKb&G !comeKb&G ! ¬animalKG ! presaKGanimalKG ! presaKG

    WW

  • 8/18/2019 04 Prolog Ling

    67/93

    ]egra de InferRncia% ]esoluVo

    N- presaKG.

     – Prolog procura& na BC& por uma regra com o predicadopresaKG como o conseDQente

     –

    BBusca outras cláusulas Due possam ser resol!idas com aregra – a( as su$stituiV\es das !ariá!eis na cláusula regraa( as su$stituiV\es das !ariá!eis na cláusula regra

    *.¬comeKb&G !comeKb&G ! ¬animalKG ! presaKGanimalKG ! presaKG

    2. comeKurso&pei9e2. comeKurso&pei9e

    ".". ¬animalKpei9e ! presaKpei9eanimalKpei9e ! presaKpei9e resol!ente de * e 2hresol!ente de * e 2h@. animal Kpei9e@. animal Kpei9e:. presa Kpei9e:. presa Kpei9e resol!ente de " e @hresol!ente de " e @h

    W

  • 8/18/2019 04 Prolog Ling

    68/93

    W[

    Controle do Programa

    Controla como o programa pode ser e9ecutado. – rdem das cláusulas no programa – rdem das su$metas dentro de cada cláusula

     – PesDuisa em profundidade Ktenta satisfa(er umasu$meta antes de seguir para a prY9ima

     – ]etrocede& tentando uma outra alternati!a de regraou instqncia de !alores para o mesmo predicado.

     – prolog disp\es de tcnicas como repeat - fail& loops& recurso e cut.

  • 8/18/2019 04 Prolog Ling

    69/93

    W+

    rdem das Cláusulas no Programa

    ependendo da ordem das cláusulas noprograma& ele pode entrar em loop infinito& ouapresentar um melHor ou pior desempenHo.

    Loop infinito.fatK6& %- 6* is 6-*& fatK6*& *& is 6 *.

    fatK)&*. –

    Assim& a ordem influi para tornar o programadecid5!el

  • 8/18/2019 04 Prolog Ling

    70/93

    %&&'/( ) uma outra forma de representa*+o do predicado concat/,.)

    rdem das Cláusulas no Programa

    esempenHoa ,,K

  • 8/18/2019 04 Prolog Ling

    71/93

    *

    appendK

  • 8/18/2019 04 Prolog Ling

    72/93

    2

    1. 33(BGsD,Hs,BGIsD) - 33(s,Hs,Is).

    +. 33(BD,Hs,Hs). 1

    1

    1

    1 2

    2

    2

    2

    1

    2

    +

    ,

    -

    7

    /

    - 33(s,Es, B1,+,CD)

    - 33(s1,Hs1, B+,CD)

    - 33(s+,Hs+, BCD)

    - 33(sC,HsC,BD)

    61, Is6B+,CD,

    s6B1Gs1D

    Es6Hs1

    6+, Is6BCD,

    s16B+Gs+D

    Hs16Hs+

    6C, Is6BD,

    s+6BCGsCD

    Hs+6HsC

    fala

    s=B1,+,CD,

    Es=BD

    s=B1,+D,

    Es=BCD

    s=B1D,Es=B+,CD

    s=BD,

    Es=B1,+,CD

    3 45 6%s3

    sC6BD,

    HsC6Hs=BD

    s+6BD,

    Hs+6Hs=BCD

    s16BD,

    Hs16Hs=B+,CD

    s6BD,

    Es6Hs=B1,+,CD

    ;r!ore de ]efutaVo

  • 8/18/2019 04 Prolog Ling

    73/93

    "

    rdem das su$metas na cláusula

    tioKT&8 %- irmaoKP&T& paiKP&8. – T pode ter !ários irmos& mas 8 sY tem um pai.

    Assim&

    tioKT&8 %- paiKP&8& irmaoKP&T.^ mais eficiente& pois no pro!oca retrocesso& aotentar $uscar outro P irmo de T Due possa ser paide 8.

  • 8/18/2019 04 Prolog Ling

    74/93

    @

    ]etrocesso K$acOtracOing

    Meta – 8ucede& se todas as su$metas no corpo sucedem. – alHa& se ao menos uma su$meta no corpo falHa. – _uando Há falHa& o Prolog tenta satisfa(er a meta

    com outras alternati!as& $uscando um casamentoa partir de onde a meta ficou.Esse processo de tentar satisfa(er todas as su$metas&

    antes de dá-la por falHa o $acOtracOing

  • 8/18/2019 04 Prolog Ling

    75/93

    -ote que o repeat repete o que se segue a ele at) o final da clusula0:

    ]etrocesso

    sim6aoKMsg %- nl& riteKMsg& repeat&  riteK Ks/n & get3cHarK6& nl&

    mem$erK6&8s6n& &

    mem$erK6&8s.N- sim6aoK>_uer Sogar primeiroN .

    _uer Sogar primeiroN Ks/nt

    Ks/nn

    false.

  • 8/18/2019 04 Prolog Ling

    76/93

    W

    peradores e Predicados de controle

    & K!irgula - conSunVo. – Todas as su$metas ligadas precisam ser

    !erdadeiras para a meta da cláusula ser

    !erdadeira.irmasKA&B %- paiKP&A& paiKP&B& A`11B. Kponto e !5rgula - isSunVo.

     – Ao menos um dos disSuntos de!e suceder paraDue a meta da cláusula suceda.

    irmasKA&B %- K paiKP&A& paiKP&BmaeKM&A& maeKM&B & A`11B.

    notKP %- P& & fail true. X sucede se P falHa.

  • 8/18/2019 04 Prolog Ling

    77/93

    peradores e Predicados de controle

    6o padro para todo prologiftHen KP&_ %- P& & _. X falHa so$ retrocesso

    iftHenKP&_ %- .

    iftHenelseKP&_&] %- P& & _. X falHa so$ retrocessoiftHenelseKP&_&] %- notKP& & ].

    caseK

  • 8/18/2019 04 Prolog Ling

    78/93

    [

    peradores e Predicados de controle

    - cut. 8empre !erdadeiro. 8o$ retrocesso& opredicado Due o contm falHa.

    Predicado com cut

    sim6aoKMsg %- nl& riteKMsg& repeat& riteKs/n N&get3cHarK6& nl& mem$erK6&8s6n& & mem$erK6&8s.

    N- sim6aoKContinuaN .ContinuaN Ks/n

    r Ks/nn

    false.

  • 8/18/2019 04 Prolog Ling

    79/93

    +

    peradores e Predicados de controle

    P -0 _ X 8e P ento _.G 1 2 -0 b is G,"& b -0 ' is b,@.

    G 1 2 &

     b 1 : &' 1 +

    N- G 1 2 -0 b is G,"& b 0 -0 ' is b,@.

    false.

  • 8/18/2019 04 Prolog Ling

    80/93

    [)

    repeat - fail

    predicado repeat forVa um programa agerar soluV\es alternati!as !ia retrocesso. – E9emplos%

    X cidades e !i(inHos.cidades %- repeat& nl& riteK cidade Kultima 1 fim 0&

    readKG& assert(KcidadeKG& G1 fim& .

    !i(inHos %- repeat& cidadeKG&

    K G 1 fim&

    nl& riteKInforme os !i(inHos de &

      riteKG& readKbs& assert(K!i(inHosKG&bs& fail.

  • 8/18/2019 04 Prolog Ling

    81/93

    [*

    ]esultado da e9ecuVo

    N- cidades.cidade

    go.cidade

    $s$.

    cidade$H.cidade

    fim.true.

    N- !i(inHos.Informe os !i(inHos de goZ

  • 8/18/2019 04 Prolog Ling

    82/93

    [2

    8ituaVo no d$

    ? listing%2vi3inhos/, cidade/14'./5 vi3inhos/, 5/

    vi3inhos% go 26s6cuia6a6h4 '.

    vi3inhos% 6s6 2go6h4 '.

    vi3inhos% 6h 26s6go4 '.

    /5 cidade/1 5/

    cidade% go '.

    cidade% 6s6 '.cidade% 6h '.

    cidade% fim '.

    true.

    8

  • 8/18/2019 04 Prolog Ling

    83/93

    ["

    Cut - fail& cut e espaVo de $usca

    cut usado em geral para manuseare9ceV\es e restringir o espaVo de $usca.

  • 8/18/2019 04 Prolog Ling

    84/93

    [@

    Cut - fail

    elegi!elKG %- analfa$etoKG& & fail.elegi!elKG %- cidadaoKG&idadeKG&b& b 01 *[.cidadaoKSoao.cidadaoKsusana.

    cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.

    ?- eleAiel(&oao).

    false.  J

  • 8/18/2019 04 Prolog Ling

    85/93

    [:

    Cut - fail

    elegi!elKG %- cidadaoKG&analfa$etoKG& fail.

    elegi!elKG %- cidadaoKG&notK analfa$etoKG&idadeKG&b& b 01 *[.

    cidadaoKSoao.cidadaoKsusana.cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.

    idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.

    ?- eleAiel().

    = ro

  • 8/18/2019 04 Prolog Ling

    86/93

    [W

    Cut - fail

    aK* %- riteKum& nl.aKG %- dKG&

    riteKdois& nl.aK" %- riteKtres& nl.dK2a.

    dK2$.N- aK6.um6 1 * dois6 1 2a

    dois6 1 2$ tres6 1 "

    N-

    a(1) - Orite(u), l.

    a() - 8(),!, Orite(8ois), l.

    a(C) - Orite(tres), l.

    8(+a).

    8(+o para ter ua

    elhor opreeso 8o ut

  • 8/18/2019 04 Prolog Ling

    87/93

    [

    cut e espaVo de $usca

    #$ a*9)1

    2+

    , -

    12

    ,-

    +%61

    %6

    6Q+aQ6Q+

  • 8/18/2019 04 Prolog Ling

    88/93

    [[

    Cut e espaVo de $usca

    espaVo de $usca de uma consulta o conSunto de todas asrespostas poss5!eis.

    Cut corte usado para redu(ir o espaVo de $usca& instruindo ointerpretador a no retroceder so$re os predicados Due

    precedem o cut. – es!antagens sacrifica a clare(a do programa causa disruptura $rusca na e9ecuVo do programa.

     – Efeito so$re consultas compostasZN- aKG& $Kb& & cKG&b&'o$tenHa um #nico !alor para G e b e a!alie cKG&b&'.

     – Efeito so$re cláusulas de um mesmo predicado se uma das cláusulas tem um corte no seu corpo& e o prolog o alcanVa&

    ento ele no fa( retrocesso so$re outras cláusulas do conSunto.KE9.% ,,& e aK6 com ár!ore de refutaVo. Estude o caso de ,, comcorte& so$re a ár!ore de refutaVo.

  • 8/18/2019 04 Prolog Ling

    89/93

    [+

    Parando depois da *a resposta

    cidadaoKSoao.cidadaoKsusana.cidadaoKro$erta.cidadaoKricardo.cidadaoKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.

    idadeKricardo& 22.idadeKmarcelo& *.analfa$etoKSoao.

    ?- i8a8e(&oao, H), !.

    H = CS 

  • 8/18/2019 04 Prolog Ling

    90/93

    +)

    Corte na su$meta

    tem]KG %- HomemKG&idadeKG&b&&b0*[.

    mulHerKsusana.mulHerKro$erta.

    HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W.idadeKsusana& *:.

    idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.

    ?- teWX().

    = &oao

    ?-

    o 8e

  • 8/18/2019 04 Prolog Ling

    91/93

    +*

    Isolando o efeito do corte

    tem]KG %- HomemKG&idadeKG&b& b0*[.

    mulHerKsusana.mulHerKro$erta.

    HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W %- .idadeKsusana& *: %- .

    idadeKro$erta& "* %- .idadeKricardo& 22 %- .idadeKmarcelo& * %- .

    ?- teWX().

    = &oao ;

    = riar8o ;

    false.o

  • 8/18/2019 04 Prolog Ling

    92/93

    +2

    Isolando o efeito do corte

    tem]KG %- HomemKG&soumaKidadeKG&b& b0*[.

    mulHerKsusana.mulHerKro$erta.

    HomemKSoao.HomemKricardo.HomemKmarcelo.idadeKSoao& "W.idadeKsusana& *:.idadeKro$erta& "*.idadeKricardo& 22.idadeKmarcelo& *.soumaKP %- P& .

    :$ tem; 5 + =

    6 5 s!sana &

    > 5 1- =

    6 5 roberta &

    > 5 +1 =6 5 ricardo &

    > 5 22 =

    6 5 marcelo &

    > 5 17

    :$ 

  • 8/18/2019 04 Prolog Ling

    93/93

    Isolando o efeito do corte

    predicado soumaKP enseSa um usoadeDuado do cut& Duando a pretenso eliminar $uscas desnecessárias& ou restringir

    a uma sY resposta. – 6o precisa usar cut diretamente na consulta – 6o precisa usar cut so$re cláusulas na $ase. – soumaKP falHa so$ retrocesso& mas no impende

    Due !ariá!eis em predicados anteriores& nomesmo corpo& seSam re!aloradas. – ^ assim uma soluVo mais limpa para o cut.