Uvod u programski jezik PROLOG Uvod n n
- Slides: 41
Uvod u programski jezik PROLOG
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 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 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 (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). male(terach).
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 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 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 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 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 is another comment */ U jednoj liniji % This is also a comment
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 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 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 [] [] 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). 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 (!) 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), !. 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, 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 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 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, 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) , 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 (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 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 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. 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, 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 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 n Aritmetika X is Exp =: = Exp, Exp == Exp >= Exp, Exp > Exp =< Exp, Exp < Exp
Primjeri
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
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, 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 --- prazno stablo N : čvor L : Lijevo podstablo R : Desno podstablo a t(a, t(b, null), t(c, null)) b c
- Prolog programski jezik
- Programski jezik r
- Programski jezik java
- Fortran programski jezik
- Kristina ledinski
- Sta je programski jezik
- Programski jezik c
- C# programski jezik
- Python programski jezik
- S struktura
- Vrste programskih jezika
- Jupiter programski jezik
- Logo programiranje
- Prvi programski jezik
- Jezik logo
- Sql programski jezik
- Delphi programski jezik
- Programski jezik pascal
- Visual prolog tutorial
- Visual prolog vs swi-prolog
- Programski jezici tfzr
- Programski jezici i strukture podataka
- Programski jezici za djecu
- Preveduva
- Programski jazici
- Programiranje i programski jazici
- Prevodjenje programskih jezika
- Diskretna matematika etf
- Objektno orijentisano programiranje
- Switch prolog
- Prolog data structures
- Block world problem prolog
- Prolog recursion
- Meaning of prolog
- What is prolog
- Prolog jazyk
- Prolog
- Prolog
- Wumpus world prolog
- Unification prolog
- Prolog family tree
- Map coloring prolog