Uvod u programski jezik PROLOG Uvod n n

  • Slides: 41
Download presentation
Uvod u programski jezik PROLOG

Uvod u programski jezik PROLOG

Uvod n n n PROgramming in LOGic Nastao je 1972. godine Prvenstveno namijenjen za

Uvod n n n PROgramming in LOGic Nastao je 1972. godine Prvenstveno namijenjen za primjenu u AI q q q Dokazivači teorema Ekspretni sistemi NLP (natural language proccessing)

Uvod n n n Ne-numeričko (simboličko) računanje Primjer: parent(tom, bob). parent je relacija između

Uvod n n n Ne-numeričko (simboličko) računanje Primjer: parent(tom, bob). parent je relacija između parametara: tom i bob Sve zajedno se naziva rečenica ili klauzula Svaka klauzula predstavlja jednu činjenicu vezano za relaciju

PROLOG interpreter n SWI-prolog, razvijen na Swedish Institute of Computer Science

PROLOG interpreter n SWI-prolog, razvijen na Swedish Institute of Computer Science

PROLOG interpreter n n n Interpreter može da učitava PROLOG datoteke ili da izvršava

PROLOG interpreter n n n Interpreter može da učitava PROLOG datoteke ili da izvršava upite Izlaz iz interpretera: halt. PROLOG datoteke obično imaju ekstenziju. pl

Naredbe u PROLOG-u n Postoje tri kategorije komandi u PROLOG-u: q q q Činjenice

Naredbe u PROLOG-u n Postoje tri kategorije komandi u PROLOG-u: q q q Činjenice (facts): rečenice koje su uvijek tačne i koje formiraju bazu znanja Pravila (rules): slična funkcijama iz proceduralnih jezika; imaju if/then strukturu Upiti (queries): interpreter učitava upit i pristupa bazi znanja; startovanje programa

Činjenice n Činjenice su komande u jednoj liniji sa tačkom na kraju father(terach, abraham).

Činjenice n Činjenice su komande u jednoj liniji sa tačkom na kraju father(terach, abraham). male(terach).

Pravila n Pravila se sastoje od q q q Uslovnog dijela ili tijela (desna

Pravila n Pravila se sastoje od q q q Uslovnog dijela ili tijela (desna strana) Zaključka ili glave (lijeva strana) Separator : - ima značenje IF parent(Parent, Child): -father(Parent, Child). parent(Parent, Child): -mother(Parent, Child). uncle(Uncle, Person) : brother(Uncle, Parent), parent(Parent, Person).

Pravila n n n Promjenljive sa lijeve strane su kvantifikovane sa univerzalnim kvantifikatorom Promjenljive

Pravila n n n Promjenljive sa lijeve strane su kvantifikovane sa univerzalnim kvantifikatorom Promjenljive koje su samo sa desne strane kvantifikovane su sa egzistencijalnim kvantifikatorom Pravila vs. Činjenice q q q Jednim imenom klauzule Činjenice su uvijek tačne Pravila definišu uslove pod kojima je nešto tačno

Upiti n n Interpreter pokušava da izvede upit koristeći činjenice i pravila iz baze

Upiti n n Interpreter pokušava da izvede upit koristeći činjenice i pravila iz baze znanja Dvije vrste odgovora q q n Yes/No: parent(tom, bob). Unifikacija/No: parent(X, bob). Svi mogući odgovori se dobijaju sa ; dok ENTER prekida izvršavanje ? -parent(Parent, abraham).

Upiti, primjeri n Q: Who is a grandparent of Jim? (using parent relationship) q

Upiti, primjeri n Q: Who is a grandparent of Jim? (using parent relationship) q q q n n Prvo nađemo Jimovog roditelja, neka je to Y Nađemo roditelja od Y, neka je to X ? - parent (Y, jim) , parent (X, Y). Q: Who are Tom’s grandchildren? Q: Are Ann and Pat siblings?

Pokretanje programa n n n Činjenice i pravila se snimaju u jednu ili više

Pokretanje programa n n n Činjenice i pravila se snimaju u jednu ili više datoteka i čine bazu znanja Datoteke se učitavaju u interpreter Ako se kasnije ove datoteke mijenjaju moraju se ponovo učitati Upiti se zadaju iza prompta ? Učitavanje: [ime_datoteke].

Komentari u PROLOG-u n n U više linija /* This is a comment This

Komentari u PROLOG-u n n U više linija /* This is a comment This is another comment */ U jednoj liniji % This is also a comment

PROLOG sintaksa n Termi q q Atomi su nizovi slova, cifara ili _ koji

PROLOG sintaksa n Termi q q Atomi su nizovi slova, cifara ili _ koji počinju sa malim slovom ili stringovi karaktera između ’ Brojevi mogu da budu cijeli ili realni Promjenljive su stringovi slova, cifara ili _ koji počinju sa velikim slovom ili _ Strukture su oblika f(t 1, t 2, . . . tn) n n q f je atom i naziva se funktor t 1, t 2, . . . tn su termi Liste se predstavljaju sa [Head|Tail]

PROLOG sintaksa n n Oblast važenja atoma je cijeli program Oblast važenja promjenljive je

PROLOG sintaksa n n Oblast važenja atoma je cijeli program Oblast važenja promjenljive je klauzula u kojoj se promjenljiva nalazi Specijalna promjenljiva _ Primjeri struktura q q date(1, jan, 2010). date(Day, jan, 2010).

PROLOG sintaksa n n Konjunkcija , Disjunkcija ; Veći prioritet ima , Primjeri: q

PROLOG sintaksa n n Konjunkcija , Disjunkcija ; Veći prioritet ima , Primjeri: q q 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

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 q(Y) X=b X=c

Backtracking, primjer 2 p(a). p(b). p(c). q(1). q(2) p(X), q(Y) X=a q(Y) X=b X=c q(Y) Y=1 Y=2 [] [] []

Backtracking, primjer 3 n n n n n parent(linda, simon). parent(sam, simon). parent(linda, sharon).

Backtracking, primjer 3 n n n n n 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, primjer 3

Backtracking, primjer 3

Backtracking i cut (!) Traženje nastavlja odavde ako Br ne uspije A Bl, !,

Backtracking i cut (!) Traženje nastavlja odavde ako Br ne uspije A Bl, !, Br G G: -A. . A: -Bl, !, Br. . cut siječe grane iz A i Bl.

Backtracking i cut (!), primjer p(a). p(b). p(c). q(1). q(2). ? -p(X), q(Y), !.

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 (!) n n n sister(S, X) : - parent(P, S), parent(P,

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

Rekurzija u PROLOG-u n n Pravila u su kao funkcije u proceduralnim jezicima i

Rekurzija u PROLOG-u n n Pravila u su kao funkcije u proceduralnim jezicima i mogu da budu rekurzivna Primjer: relacija ancestor q q baza rekurzije: ancestor(X, Z) : - parent (X, Z). rekurzija: ancestor (X, Z) : - parent (X, Y) , ancestor (Y, Z).

Računanje upita n n PROLOG počinje od cilja (backward) Koristeći pravila, tekući cilj (koji

Računanje upita n n PROLOG počinje od cilja (backward) Koristeći pravila, tekući 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 vraća prvi odgovor koji zadovoljava cilj. Kada tekućom granom ne može da dokaže cilj ili kada se pritisne ; PROLOG interpreter se vraća na prethodni čvor i pokušava sa nekim drugim pravilom

Primjer n Baza parent (pam, bob). parent (tom, liz). parent (bob, ann). parent (bob,

Primjer n Baza parent (pam, bob). parent (tom, liz). parent (bob, ann). parent (bob, pat). parent (pat, jim). n Pravila ancestor (X, Z) : - parent (X, Z). ancestor (X, Z) : - parent (X, Y) , ancestor (Y, Z) n n n Cilj: ancestor (tom, pat). Prvo navedeno pravilo se primjenjuje, unifikacija {tom/X} , {pat/Z}, pa je sada cilj parent (tom, pat). Fails, backtrack

Primjer n n n Drugo pravilo ancestor (X, Z) : - parent (X, Y)

Primjer n n n 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 rješavaju 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

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 n n n Varijante 1. i 2. su u redu

Redosled ciljeva i klauzula n n n Varijante 1. i 2. su u redu Varijanta 3. u nekim slučajevim daje rješenje Varijanta 4. nikad ne završava (beskonačna rekurzija)

Unifikacija n t 1 = t 2 uspijeva ako q q t 1 i

Unifikacija n t 1 = t 2 uspijeva ako q q t 1 i t 2 su identični postoji substitucija q za promjenljive u t 1 i t 2 tako da t 1 q = t 2 q. 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.

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 n unify(t 1, t 2) q q q ako je t 1 promjenljiva,

Unifikacija n unify(t 1, t 2) q q q ako je t 1 promjenljiva, onda t 1/t 2 ako je t 2 promjenljiva, onda t 2/t 1 ako su t 1 i t 2 atomi n n q ako su t 1 i t 2 identični vrati T inače, vrati F t 1=f(a 1, . . . , an) i t 2=g(b 1, . . . , bm) n n ako je f != g || m != n vrati F vrati unify(a 1, b 1) &&. . . && unify(an, bm)

Unifikacija n Da li sledeće rečenice mogu da se unifikuju? Ako mogu, koja je

Unifikacija n Da li sledeće rečenice mogu da se unifikuju? Ako mogu, koja je substitucija? n point(A, B) = point(1, 2). A=1 B=2; n n n point(A, B) = point(X, Y, Z). plus(2, 2) = 4. +(2, D) = +(E, 2). D=2 E=2; n tri(point(-1, 0), P 2, P 3) = tri(P 1, point(1, 0), point(0, Y)). P 2 = point(1, 0) P 3 = point(0, _G 171) P 1 = point(-1, 0) Y = _G 171 ;

Ugrađene funkcije n Unifikacija T 1 = T 2 T 1 = T 2

Ugrađene funkcije n Unifikacija T 1 = T 2 T 1 = T 2 n Aritmetika X is Exp =: = Exp, Exp == Exp >= Exp, Exp > Exp =< Exp, Exp < Exp

Primjeri

Primjeri

Ugrađene funkcije n arg(N, T, A) q n functor(T, F, N) q n funktor

Ugrađene funkcije n arg(N, T, A) q n functor(T, F, N) q n funktor od T je F/N. T 1==T 2 q n Nti argument od T je A T 1 i T 2 su identični T 1 == T 2 q T 1 i T 2 nijesu identični

Primjeri

Primjeri

Rekurzija, liste n n Lista se predstavlja se [H|T] Implementirati sledeće predikate: q q

Rekurzija, liste n n Lista se predstavlja se [H|T] Implementirati sledeće predikate: q q q q je. Lista(Xs) car(Xs, X) cdr(Xs, Ys) cons(X, Xs, Ys) clan(X, Xs) spoji(Xs, Ys, Zs) duzina(Xs, N)

Rekurzija, liste n Implementirati sledeće predikate: q q q q poslednji(X, Xs) prefiks(Pre, Xs,

Rekurzija, liste n Implementirati sledeće predikate: q q q q poslednji(X, Xs) prefiks(Pre, Xs, X) sufiks(Pos, X) okret(Xs, Ys) prefiks 1(Pre, Xs) sufiks 1(Pos, Xs) suma(Xs, N) suma 1(Xs, Ys) n q ako je Xs lista [x 1, x 2, . . . , xn], onda Ys je lista [y 1, y 2, . . . , yn] takva da yi je xi+1. sortiraj(L, Sorted. L)

Binarna stabla n Binarno stablo u PROLOG-u null t(N, L, R) n Primjer ---

Binarna stabla n Binarno stablo u PROLOG-u null t(N, L, R) n Primjer --- prazno stablo N : čvor L : Lijevo podstablo R : Desno podstablo a t(a, t(b, null), t(c, null)) b c