Professional Documents
Culture Documents
Uvod U Programski Jezik PROLOG..
Uvod U Programski Jezik PROLOG..
Uvod U Programski Jezik PROLOG..
Uvod
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
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
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
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
Upiti, primjeri
Prvo naemo Jimovog roditelja, neka je to Y Naemo roditelja od Y, neka je to X ?- parent (Y, jim) , parent (X, Y).
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
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)
PROLOG sintaksa
Oblast vaenja atoma je cijeli program Oblast vaenja promjenljive je klauzula u kojoj se promjenljiva nalazi Specijalna promjenljiva _ Primjeri struktura
PROLOG sintaksa
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
[]
[]
[]
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
?-!,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 ;
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
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
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
point(A,B) = point(1,2).
A=1 B=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
jeLista(Xs) car(Xs, X) cdr(Xs, Ys) cons(X, Xs, Ys) clan(X,Xs) spoji(Xs,Ys,Zs) duzina(Xs,N)
Rekurzija, liste
sortiraj(L,SortedL)
Binarna stabla
Primjer
a