Prolog
This presentation is the property of its rightful owner.
Sponsored Links
1 / 30

Prolog PowerPoint PPT Presentation


  • 75 Views
  • Uploaded on
  • Presentation posted in: General

Prolog. Un programa Prolog està format per un conjunt de fòrmules LP1 (claúsules de Horn) que representa un conjunt d’objectes i de relacions entre aquests objectes. Fets : Regles : plou. mortal(X):-home(X). home(plato). avi(X,Y):-pare(X,Z),pare(Z,Y).

Download Presentation

Prolog

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Prolog

Prolog

Un programa Prolog està format per un conjunt de fòrmules LP1 (claúsules de Horn) que representa un conjunt d’objectes i de relacions entre aquests objectes.

Fets : Regles :

plou. mortal(X):-home(X).

home(plato). avi(X,Y):-pare(X,Z),pare(Z,Y).

pare(joan,pere).

avi(X,joan).


Prolog

joan

anna

maria

pere

marc

laura

Imma

xavi

Un programa de càlcul de relacions de parentesc en prolog


Prolog

home(joan).

home(pere).

home(marc).

home(xavi).

dona(anna).dona(maria).dona(laura).

dona(imma).

matrimoni(joan,anna).

matrimoni(marc,laura).

pro(joan,pere).

pro(anna,pere).

pro(joan,marc).

pro(anna,marc).

pro(maria,laura).

pro(pere,imma).

pro(marc,xavi).

pro(laura,xavi).

pare(X,Y):-home(X),pro(X,Y).

avi(X,Y):-pare(X,Z),pro(Z,Y).

avi(joan,Q).

joan/X Q/Y

pare(joan,Z)

pro(Z,Y)

joan/X Z/Y’

home(joan)

pro(joan,Y’)

pro(Y’,Y)

Y’/pere

pro(joan,Y’)

pro(Y’,Y)

pro(marc,Y)

pro(pere,Y)

Y/xavi

Y/imma


Prolog

home(joan).

home(pere).

home(marc).

home(xavi).

dona(anna).dona(maria).dona(laura).

dona(imma).

matrimoni(joan,anna).

matrimoni(marc,laura).

pro(joan,pere).

pro(anna,pere).

pro(joan,marc).

pro(anna,marc).

pro(maria,laura).

/*pro(pere,imma).*/

pro(marc,xavi).

pro(laura,xavi).

pare(X,Y):-home(X),pro(X,Y).

avi(X,Y):-pare(X,Z),pro(Z,Y).

avi(joan,Q).

joan/X Q/Y

pare(joan,Z)

pro(Z,Y)

joan/X Z/Y’

home(joan)

pro(joan,Y’)

pro(Y’,Y)

Y’/pere

pro(joan,Y’)

pro(Y’,Y)

pro(marc,Y)

pro(pere,Y)

Y/xavi

FAIL


Prolog

Sintaxi : Termes

àtoms : constants textuals.

joan

x23

‘Johnnie Walker’

nombres : Reals o sencers

-37

2.023E-14

variables : Comencen per una majúscula o un símbol ‘_’

X23

Joan

_114

Termes

Simples

Compos-

tos

constants

variables

àtoms

nombres


Prolog

Sintaxi : Termes (II)

Termes compostos: Formats per un nom de predicat (àtom) i una seqüència d’arguments, entre parèntesis i separats per comes. Aquests arguments són, a la seva vegada, termes.

pare(joan,jordi).

persona(nom(joan,canals),edat(30).dom(carrer(nord),num(22))).

Exemple: Gestió d’una biblioteca. Tindrem dues classes de termes compostos o estructures:

llibre(ref(11540), autor(‘Gabriel García Márquez’),titol(’100 años de soledad’),ed(anaya,any(1993))).

lector(id(202),nom(‘Pere Sala Güell’),dom(carrer(orient), num(1),mun(girona),tlf(972205674))).

prestec(llibre(11540), lector(202),dataini(2,11,2001), datafi(2,1,2002),tornat(no)).

Podem preguntar el telèfon de tots els lectors de Gabriel García Márquez que viuen al carrer Jaume I de Girona


Prolog

r1

(r1* r2) / (r1+ r2)

7

r2

2

9

3

5

r1

r2

r1+ r2

?- r_eq(s(p(s(p(7,3),9),3),2),R).

r_eq(X,X):-number(X).

r_eq(s(X,Y),R):-r_eq(X,R1),r_eq(Y,R2),R is R1+R2.

r_eq(p(X,Y),R):-r_eq(X,R1),r_eq(Y,R2),R is (R1*R2)/(R1+R2).


Prolog

Unificació : Variables instanciades, lliures i lligades

persona(joan,23).

persona(maria,19).

major_dedat(X):-persona(X,Y),Y>=18.

Una variable és lliure quan no està instanciada.

Una variable queda instanciada quan pren un valor :

?- major_dedat(Z)

Aquí Z està lliure

Z/X

Aquí Z i X queden lligades

Aquí X i Y són lliures

persona(X,Y),

Y>=18

Aquí s’instancien X, Y i Z

X/joan , Y/23

23>=18

Z=joan


Prolog

Unificació : Substitucions

Una substitució és un conjunt de parells X/T on X és una variable i T es un terme prolog qualsevol.

Per exemple :

S = {X/pere, Y/p(Z,q(32)), K/T}

Les substitucions es poden aplicar als termes prolog.

Per exemple :

Sigui Q = r(X,Y,p(K)) llavors:

QS = r(pere, p(Z,q(32)), p(T))


Prolog

Unificació : Definició

Donats dos termes prolog T1 i T2, una substitució S tal que T1S = T2S. es diu un unificador de T1 i T2

Donats dos termes prolog T1 i T2, unificar-los consisteix en trobar l’unificador més general tal que T1S = T2S.

Per exemple :

T1 és p(X)

T2 és p(Y)

S={X/1, Y/1} és un unificador de T1 i T2,

però S’={X/Y}és més general

Unificador més general (m.g.u.) de T1 i T2 : És l’unificador de

T1 i T2 que té el mínim nombre de variables instanciades


Prolog

Algorisme d’unificació.

  • Dos termes S i T s’unifiquen segons les següents regles:

  • a) Si S i T són constants o variables instanciades com a constants, s’unifiquen si i només si tenen el mateix valor.

  • b) Si S i T són variables lliures, s’unifiquen i queden lligades.

  • c) Si S és una variable lliure i T un terme qualsevol, s’unifiquen i S queda instanciada com a T.

  • d) Si S i T són estructures s’unifiquen només si

  • S i T tenen el mateix functor principal, (Defineixen el mateix predicar), i el mateix nombre d’arguments.

  • Els arguments corresponent s’unifiquen dos a dos.


Unificaci exemples

Unificació. Exemples

El símbol ‘ = ‘ és l’operador d’unificació. Donats dos termes T1 i T2 T1 = T2 és veritat si i només si T1 i T2 es poden unificar.

?- data(dia(2),X,any(Z))=data(Y,Z,any(99)).

?- data(dia(X),mes(2),Z)=data(dia(3),mes(X),any(T)).

?- data(dia(X),mes(2),any(Z))=data(Z,mes(X),T).

?- X=2+3.

?- X=p(X).

Exercici: Suposem que representem un punt (x,y) al pla com p(x,y) i un segment del punt p1 al p2 com s(p1,p2). Definir relacions per determinar quan un segment és vertical i quan tres segments formen un triangle.


Exemple el mico i el pl tan

Exemple : el mico i el plàtan

finestra

Hi ha un mico a la porta d’una habitació. Hi ha un plàtan penjant del sostre i una caixa al costat de la finestra. El mico ha de trobar una seqüència d’accions que li permetin menjar-se el plàtan.

caixa

plàtan

mico

porta

El mico pot fer quatre accions diferents : caminar a qualsevol punt de la cambra, pujar-se a la caixa, arrossegar la caixa i agafar el plàtan.


Prolog

El mico i el plàtan (II).

mov(estat(mig,asobre,mig,no),estat(mig,asobre,mig,si)).

mov(estat(P,aterra,P,T),estat(P,asobre,P,T)).

mov(estat(P,aterra,P,T),estat(P2,aterra,P2,T)).

mov(estat(P,aterra,PC,T),estat(P2,aterra,PC,T)).

pot_menjar(estat(_,_,_,si)).

pot_menjar(E):-mov(E,E2), pot_menjar(E2).

Programa prolog que resol el problema del mico i el plàtan.

Si ordenéssim les clàusules que defineixen els moviments de manera diferent, no funcionaria.


Operadors en prolog

Operadors en prolog

  • Siguin T1 i T2 termes. Podem distingir diferents tipus d’operadors:

  • Operadors d’unificació :

    • T1= T2 sii T1 i T2 es poden unificar

    • T1\= T2 sii T1 i T2 no es poden unificar

  • Operadors aritmètics : + , - , * , / , // , mod.

  • L’operador is. Serveix per a forçar l’avaluació de les expressions aritmètiques. T1 is T2 és cert sii el resultat d’avaluar T2 es pot unificar amb T1.

  • Exemples : X is 2+3. 8 is 7+1. X=2+2,Y is 2*X SI

  • X is joan - 3. 5 is 2+2. X=4,X is 3*2. X is 2*Y NO


  • Operadors en prolog ii

    Operadors en prolog (II)

    Operadors de comparació :

    Siguin T1 i T2 termes.

    T1 > (<) T2 sii el resultat d’avaluar T1 es major (menor) que

    el resultat d’avaluar T2.

    T1 >= (=<) T2 sii el resultat d’avaluar T1 es major (menor) o

    igual que el resultat d’avaluar T2.

    T1=:= (=\=) T2 sii el resultat d’avaluar T1 igual que el resultat

    d’avaluar T2.

    T1== (\==) T2 sii T1 i T2 són (no són) exactament el mateix terme


    Prolog

    Exemple.

    /* pais(Nom, Població, Superfície) */

    país(albania, 3000. 250).

    pais(alemania,80000 , 1000).

    pais(andorra,100 , 0.4).

    mes_gran(X,Y):-pais(X,_,S1),pais(Y,_,S2), S1>S2.

    densitat(Pais,D):- pais(Pais,P,S), D is P/S.


    Operadors en prolog iii preced ncies

    Operadors en prolog (III). Precedències

    :- op( 1200 , xfx , ’:-’ ).

    :- op( 1200 , fx , [:-,?-]).

    :- op( 1100 , xfy , ’;’ ).

    :- op( 1000 , xfy , ’,’ ).

    :- op( 700 , xfx , [ = , is , < , > , =< , .>= , == , =\= , =:= ,\== ]).

    :- op( 500 , yfx , [ + , - ] ).

    :- op( 500 , fx , [ + , - , not ] ).

    :- op( 400 , yfx , [ * , / , div ] ).

    :- op( 300 , xfx , mod ).

    El conjunt dels operadors predefinits en prolog, juntament

    amb les seves precedències i associativitats:


    Operadors definits per l usuari

    Operadors definits per l’usuari

    Exemple

    :- op(900,xfx,te).

    :- op(890,xfy,i).

    :- op(900,xfx,es_troba_a).

    joan te cotxe i moto i bici.

    pere te bici.

    anna te moto i vaixell.

    X te Y :- X te Z, Y es_troba_a Z.

    X es_troba_a X.

    X es_troba_a X i _.

    X es_troba_a Y i R :- X es_troba_a R.


    El cut

    El “cut” ( ! )

    Aquest operador predefinit es fa servir per a limitar el backtracking. Quan el prolog intenta fer servir un fet o regla per a demostrar un objectiu (goal), posa un punt de backtracking a aquest fet o regla per poder triar noves alternatives de demostració. Si en aquest procés de demostració el prolog troba un cut a la part dreta d’una regla, esborra tots els punts de backtracking establerts des del moment que s’ha intentat fer servir la regla que conté el cut per demostrar l’objectiu actual.


    El cut1

    El “cut” ( ! )

    p:-q,r,s.

    p:-t.

    q.

    r:-y.

    r:-x.

    x.

    t.

    p:-q,r,!,s.

    p:-t.

    q.

    r:-y.

    r:-x.

    x.

    t.


    El cut2

    El “cut” ( ! )

    max(X,Y,X):-X>=Y.

    max(X,Y,Y):-X<Y.

    max(X,Y,X):-X>=Y,!.

    max(X,Y,Y).

    f(X,0):-X<=0.

    f(X,3):-0<X=<4.

    F(X,5):-4<X.

    f(X,0):-X<=0,!.

    f(X,3):-X=<4,!.

    F(X,5).

    member(X,[X|_]):-!.

    member(X,[_|R]):-

    member(X,R).

    esborrar(X,[X|R],R):-!.

    esborrar(X, [Y|R], [Y|R2]):-

    esborrar(X,R,R2).


    Prolog

    Els predicats predefinits fail i not

    fail : el predicat fail mai es pot demostrar. Es fa servir sobre tot per forçar al prolog a fer backtracking. També existeix el predicat true.

    Exemple : dues formes de definir un predicat per escriure per pantalla els elements d’una llista :

    escriure(L):-member(X,L),

    write(X),

    fail.

    escriure(_).

    escriure([]).

    escriure([X|R]):-write(X),

    escriure(R).


    Prolog

    Els predicats predefinits fail i not

    not , \+ : Negation as failure. not p (\+ p) és cert si i només si p no es pot demostrar.

    Exemple : not 4=3. not member(1,[2,3]). Cert

    not member(X,[2,3]). Fals

    Es defineix així :

    not P :- P,!,fail;

    true.


    Entrada i sortida en prolog

    Entrada i Sortida en Prolog

    WVM

    Input Stream

    Output Stream

    Programa

    prolog

    En prolog hi ha en tot moment un canal (stream) actual de sortida i un canal actual d’entrada. Tota la sortida es fa al canal actual de sortida i tota l’entrada es fa desde el canal actual d’entrada. Per defecte tots dos canals són la consola del prolog (user).


    Predicats e s en prolog

    Predicats E/S en Prolog.

    Maneig dels canals

    see(nomfitxer).

    tell(nomfitxer).

    seen.

    told.

    seeing(NomFitxer).

    telling(Nomfitxer).


    Predicats e s en prolog1

    Predicats E/S en Prolog.

    Lectura i Escriptura

    get0(CodiCaracter).

    get(CodiCaracter). Caracters imprimibles. eof=-1

    put(CodiCaracter).

    write(Terme).

    read(Terme). end_of_file


    Exemple processament d un fitxer de notes

    Exemple. Processament d’un fitxer de notes.

    aprovats:-see('alumnes.txt'),

    tell('aprovats.txt'),

    repeat,

    read(T),

    processar(T).

    processar(end_of_file):-!, seen, told.

    processar(alumne(Nom,Nota)):-Nota>=5,

    write(aprovat(Nom,Nota)),

    write('.'),nl,

    fail.


    Exemple treure els espais en blanc de sobres

    Exemple. Treure els espais en blanc de sobres.

    blancs:-see('entrada.txt'),

    tell('sortida.txt'),

    get0(C),

    fora_blancs(C).

    fora_blancs(-1):-!, seen, told.

    fora_blancs(C):-!, put(C),

    (C=32->get(C2);get0(C2)),

    fora_blancs(C2).


    Modificaci din mica de programes en prolog

    Modificació dinàmica de programes en Prolog

    assert(Term).

    assertz(Term).

    asserta(Term).

    retract(Term).

    retractall(Term).

    consult(nomfitxer).

    reconsult(nomfitxer).


  • Login