Uvod U Programski Jezik PROLOG..

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 41

Uvod u programski jezik PROLOG

Uvod

PROgramming in LOGic Nastao je 1972. godine Prvenstveno namijenjen za primjenu u AI


Dokazivai teorema Ekspretni sistemi NLP (natural language proccessing)

Uvod

Ne-numeriko (simboliko) raunanje Primjer: parent(tom, bob). parent je relacija izmeu parametara: tom i bob Sve zajedno se naziva reenica ili klauzula Svaka klauzula predstavlja jednu injenicu vezano za relaciju

PROLOG interpreter

SWI-prolog, razvijen na Swedish Institute of Computer Science

PROLOG interpreter

Interpreter moe da uitava PROLOG datoteke ili da izvrava upite Izlaz iz interpretera: halt. PROLOG datoteke obino imaju ekstenziju .pl

Naredbe u PROLOG-u

Postoje tri kategorije komandi u PROLOG-u:

injenice (facts): reenice koje su uvijek tane i koje formiraju bazu znanja Pravila (rules): slina funkcijama iz proceduralnih jezika; imaju if/then strukturu Upiti (queries): interpreter uitava upit i pristupa bazi znanja; startovanje programa

injenice

injenice su komande u jednoj liniji sa takom na kraju


father(terach,abraham). male(terach).

Pravila

Pravila se sastoje od

Uslovnog dijela ili tijela (desna strana) Zakljuka ili glave (lijeva strana) Separator :- ima znaenje IF
parent(Parent,Child):-father(Parent,Child). parent(Parent,Child):-mother(Parent,Child). uncle(Uncle,Person) :brother(Uncle,Parent), parent(Parent,Person).

Pravila

Promjenljive sa lijeve strane su kvantifikovane sa univerzalnim kvantifikatorom Promjenljive koje su samo sa desne strane kvantifikovane su sa egzistencijalnim kvantifikatorom Pravila vs. injenice

Jednim imenom klauzule injenice su uvijek tane Pravila definiu uslove pod kojima je neto tano

Upiti

Interpreter pokuava da izvede upit koristei injenice i pravila iz baze znanja Dvije vrste odgovora

Yes/No: parent(tom, bob). Unifikacija/No: parent(X, bob).

Svi mogui odgovori se dobijaju sa ; dok ENTER prekida izvravanje


?-parent(Parent,abraham).

Upiti, primjeri

Q: Who is a grandparent of Jim? (using parent relationship)


Prvo naemo Jimovog roditelja, neka je to Y Naemo roditelja od Y, neka je to X ?- parent (Y, jim) , parent (X, Y).

Q: Who are Toms grandchildren? Q: Are Ann and Pat siblings?

Pokretanje programa

injenice i pravila se snimaju u jednu ili vie datoteka i ine bazu znanja Datoteke se uitavaju u interpreter Ako se kasnije ove datoteke mijenjaju moraju se ponovo uitati Upiti se zadaju iza prompta ?Uitavanje: [ime_datoteke].

Komentari u PROLOG-u

U vie linija /* This is a comment This is another comment */ U jednoj liniji


% This is also a comment

PROLOG sintaksa

Termi

Atomi su nizovi slova, cifara ili _ koji poinju sa malim slovom ili stringovi karaktera izmeu Brojevi mogu da budu cijeli ili realni Promjenljive su stringovi slova, cifara ili _ koji poinju sa velikim slovom ili _ Strukture su oblika f(t1, t2, ... tn)

f je atom i naziva se funktor t1, t2, ... tn su termi

Liste se predstavljaju sa [Head|Tail]

PROLOG sintaksa

Oblast vaenja atoma je cijeli program Oblast vaenja promjenljive je klauzula u kojoj se promjenljiva nalazi Specijalna promjenljiva _ Primjeri struktura

date(1, jan, 2010). date(Day, jan, 2010).

PROLOG sintaksa

Konjunkcija , Disjunkcija ; Vei prioritet ima , Primjeri:


P :- Q , R ; S , T , U . P :- (Q , R) ; (S , T , U) .

P :- Q ; R. P :- Q P :- R

Backtracking, primjer 1
interna reprezentacija za neinstanciranu promjenljivu

p(a). p(b). p(c). p(X)


X=a X=b X=c

[]

[]

[]

Backtracking, primjer 2
p(a). p(b). p(c). q(1). q(2)

p(X),q(Y)
X=a

X=b

X=c

q(Y)
Y=1 Y=2

q(Y)
Y=1 Y=2

q(Y)
Y=1 Y=2

[]

[]

[]

[]

[]

[]

Backtracking, primjer 3

parent(linda, simon). parent(sam, simon). parent(linda, sharon). parent(sam, sharon). female(sharon). sister(S,X) :- parent(P,S), parent(P,X), female(S). | ?- sister(Who, simon). Who = sharon; Who = sharon

Backtracking, primjer 3

Backtracking, primjer 3

Backtracking i cut (!)


Traenje nastavlja odavde ako Br ne uspije
A Bl,!,Br G
G:-A. ... A:-Bl,!,Br. ...

cut sijee grane iz A i Bl.

Backtracking i cut (!), primjer


p(a). p(b). p(c). q(1). q(2). ?-p(X),q(Y),!. X=a Y=1 ?-p(X),!,q(Y).
X=a, Y=1 X=a, Y=2

?-!,p(X),q(Y).
X = a, Y = 1 ; X = a, Y = 2 ; X = b, Y = 1 ; X = b, Y = 2 ; X = c, Y = 1 ; X = c, Y = 2 ;

Backtracking i cut (!)

sister(S,X) :- parent(P,S), parent(P,X), female(S), !. % don't backtrack! | ?- sister(Who, simon). Who = sharon; no

Rekurzija u PROLOG-u

Pravila u su kao funkcije u proceduralnim jezicima i mogu da budu rekurzivna Primjer: relacija ancestor

baza rekurzije: ancestor(X, Z) :- parent (X, Z). rekurzija: ancestor (X, Z) :- parent (X, Y) , ancestor (Y, Z).

Raunanje upita

PROLOG poinje od cilja (backward) Koristei pravila, tekui cilj (koji se unifikuje sa glavom nekog pravila) zamjenjuje sa podciljevima koji su u tijelu pravila, sve dok novi podciljevi ne budu injenice iz baze PROLOG vraa prvi odgovor koji zadovoljava cilj. Kada tekuom granom ne moe da dokae cilj ili kada se pritisne ; PROLOG interpreter se vraa na prethodni vor i pokuava sa nekim drugim pravilom

Primjer

Baza
parent (pam, bob). parent (tom, bob). parent (tom, liz). parent (bob, ann). parent (bob, pat). parent (pat, jim).

Pravila
ancestor (X, Z) :- parent (X, Z). ancestor (X, Z) :- parent (X, Y) , ancestor (Y, Z)

Cilj: ancestor (tom, pat). Prvo navedeno pravilo se primjenjuje, unifikacija {tom/X} , {pat/Z}, pa je sada cilj parent (tom, pat). Fails, backtrack

Primjer

Drugo pravilo ancestor (X, Z) :- parent (X, Y) , ancestor (Y, Z). unifikacija {tom/X} , {pat/Z} Novi cilj parent (tom, Y) , ancestor (Y, pat) Podciljevi se rjeavaju redosledom kojim su navedeni Prvi podcilj je injenica {bob/Y} Drugi podcilj je ancestor (bob, pat) Isti koraci kao i za originalni cilj

Redosled ciljeva i klauzula


1. ancestor (X, Z) :- parent (X, Z). ancestor (X, Z) :- parent (X, Y) , ancestor (Y, Z). 2. ancestor (X, Z) :- parent (X, Y) , ancestor (Y, Z). ancestor (X, Z) :- parent (X, Z). 3. ancestor (X, Z) :- parent (X, Z). ancestor (X, Z) :- ancestor (Y, Z) , parent (X, Y). 4. ancestor (X, Z) :- ancestor (Y, Z) , parent (X, Y). ancestor (X, Z) :- parent (X, Z).

Redosled ciljeva i klauzula

Varijante 1. i 2. su u redu Varijanta 3. u nekim sluajevim daje rjeenje Varijanta 4. nikad ne zavrava (beskonana rekurzija)

Unifikacija

t1 = t2 uspijeva ako

t1 i t2 su identini postoji substitucija q za promjenljive u t1 i t2 tako da t1q = t2q.

f(X,b)=f(a,Y).

q = {X/a, Y/b}

Unifikacija, primjeri
?-X=1. X=1 ?- f(a,b)=f(a,b). yes ?- a=b. no ?- f(X,Y)=f(a,b) X=a Y=b ?-f(X,b)=f(a,Y). X=a Y=b

Unifikacija

unify(t1,t2)

ako je t1 promjenljiva, onda t1/t2 ako je t2 promjenljiva, onda t2/t1 ako su t1 i t2 atomi

ako su t1 i t2 identini vrati T inae, vrati F ako je f != g || m != n vrati F vrati unify(a1,b1) && ... && unify(an,bm)

t1=f(a1,...,an) i t2=g(b1,...,bm)

Unifikacija

Da li sledee reenice mogu da se unifikuju? Ako mogu, koja je substitucija?

point(A,B) = point(1,2).
A=1 B=2;

point(A,B) = point(X,Y,Z). plus(2,2) = 4. +(2,D) = +(E,2).


D=2 E=2;

tri(point(-1,0),P2,P3) = tri(P1,point(1,0),point(0,Y)).
P2 = point(1, 0) P3 = point(0, _G171) P1 = point(-1, 0) Y = _G171 ;

Ugraene funkcije

Unifikacija
T1 = T2 T1 \= T2

Aritmetika
X is Exp Exp =:= Exp, Exp =\= Exp Exp >= Exp, Exp > Exp Exp =< Exp, Exp < Exp

Primjeri

Ugraene funkcije

arg(N,T,A)

Nti argument od T je A
funktor od T je F/N. T1 i T2 su identini T1 i T2 nijesu identini

functor(T,F,N)

T1==T2

T1 \== T2

Primjeri

Rekurzija, liste

Lista se predstavlja se [H|T] Implementirati sledee predikate:


jeLista(Xs) car(Xs, X) cdr(Xs, Ys) cons(X, Xs, Ys) clan(X,Xs) spoji(Xs,Ys,Zs) duzina(Xs,N)

Rekurzija, liste

Implementirati sledee predikate:


poslednji(X,Xs) prefiks(Pre,Xs,X) sufiks(Pos,Xs,X) okret(Xs,Ys) prefiks1(Pre,Xs) sufiks1(Pos,Xs) suma(Xs,N) suma1(Xs,Ys)

ako je Xs lista [x1,x2,...,xn], onda Ys je lista [y1,y2,...,yn] takva da yi je xi+1.

sortiraj(L,SortedL)

Binarna stabla

Binarno stablo u PROLOG-u


null t(N,L,R) --prazno stablo N : vor L : Lijevo podstablo R : Desno podstablo

Primjer
a

t(a, t(b, null,null), t(c,null,null))

You might also like