41
PROLOG (I DEO)

PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG(I DEO)

Page 2: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG (PROGRAMMING IN LOGIC)

Naziv PROLOG je skraćenica od englaskih reči

PRO(gramming) in LOG(ic).

Autor PROLOG-a je Francuz Alen Colmerauer.

Prva verzija je napravljena 1971. godine u

Marseju.

Postoji više verzija PROLOG-a (npr. mikro-

PROLOG, turbo-PROLOG, m-PROLOG, SWI-

PROLOG, itd.).

Page 3: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PRIMER. PROGRAM NA SWI-PROLOGU

Page 4: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG (PROGRAMMING IN LOGIC)

Relacioni – logički jezik. Koristi se za rešavanje problema koji se zasnivajuna objektima i relacijama između objekata.

Neprocedurni jezik. Nije bitan redosled naredbi, već semantika programa. Nema aritmetičku naredbu dodeljivanja vrednosti, ni goto naredbu.

Deklarativni (opisni, deskriptivni) jezik. Opisuje se ŠTA program treba dauradi, a ne KAKO da reši problem kao u konvencionalnim procedurnimjezicima (Pascal, FORTRAN, COBOL).

Predikatski račun prvog reda čini teorijsku osnovu PROLOG-a.

Automatizovano traţenje rešenja. Postupak traženja rešenja zasniva se napravilu rezolucije (SLDNF rezolucija) koje se primenjuje na Hornove sastavke.

Konačni neuspeh. Negacija se u većini vrsta jezika PROLOG tretira kaokonačni neuspeh.

Intenzivna primena rekurzije. Podržava primenu rekurzivnih pravila.

Page 5: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG (PROGRAMMING IN LOGIC)

Postupak traženja rešenja zasniva se na pravilu

rezolucije (Robinson 1965.) koje se primenjuje

na Hornove sastavke (disjunkte, klauzule).

Sastavci koji sadrže bar jedan pozitivan literal

zovu se Hornovi sastavci. Hornovi sastavci su

oblika:

Ako p1, p2, ... , pn onda c

što se zapisuje

c :- p1, p2, ... , pn.

Program na PROLOG-u je niz rečenica

(klauzula) od kojih se svaka završava tačkom.

Page 6: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

VRSTE REČENICA

Vrste rečenica u PROLOG-u su:

1. Činjenice

2. Pravila

3. Ciljevi.

Page 7: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

1. ČINJENICE

Činjenice ili fakta (jednostavne izjavne rečenice).

Ĉinjenicama se iskazuje da među entitetima,

predstavljenim pomoću argumenata važi relacija

(odnos) predstavljen datim predikatom:

predikat(Arg_1, ... , Arg_n).

Pravila za formiranje fakata:

1. Imena relacija i objekata pišu se rečima koje obavezno

počinju malim slovom.

2. Relacija se piše prva, a za njom se u zagradi pišu objekti

(argumenti) međusobno rastavljeni zarezima.

3. Tačka dolazi na kraju fakta.

Page 8: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

2. PRAVILA

Pravila (uslovne rečenice). Pravila su oblika:

zaključak :- pretpostavke.

pri tome je zaključak jednostavan iskaz i zove se

glava pravila, a pretpostavke čine telo

pravila i sastoje se iz jednog ili više jednostavnih

iskaza i/ili negacija takvih iskaza. Iskazi koji

tvore pretostavke povezani su konjunktivno i/ili

disjunktivno.

Page 9: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

3. CILJEVI

Ciljevi ili pitanja (upitne rečenice). Ciljevima se iniciraizračunavanje odgovora. Sistem pokušava zadovoljitipostavljeni cilj primenom znanja datih programom. Ciljevisu oblika:

? - elementi_cilja.

pri tome elementi_cilja predstavljaju konjunkcijejednostavnih iskaza i/ili negiranih jednostavnih iskaza.

Ciljevi su pravila bez glave, a činjenice su pravila bez tela.

Sve promenljive u klauzulama su univerzalnokvantifikovane.

Page 10: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

SINTAKSA PROLOG - JEZIKA

Azbuku PROLOG-a (skup znakova) čine:

Velika slova: A, B, .... , Z

Mala slova: a, b, ... , z

Brojke: 0, 1, ... , 9

Posebni znaci: *, + , - , /, ?, ...

Term je sintaksno prihvatljiv niz znakova.Termi

se dele na:

Konstante,

Promenljive,

Strukture.

Page 11: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

KONSTANTE

Konstante mogu biti:

Atomi. Atom je konačan niz znakova koji

zadovoljava jedan od uslova:

1. atom je niz slova, brojki i specijalnih znakova '_'

koji obavezno počinje malim slovom (a, ana, a_1, ...)

2. atom je niz posebnih znakova (=, **, !, :-, ... )

3. atom je niz znakova između navodnika

("A", "Ana","Ana Kon", "+z", ...)

Brojevi:

Celi brojevi (123, -123, ...)

Realni brojevi (135, 0.767, -0.98, ...)

Page 12: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROMENLJIVE

Promenljive predstavljamo (imenujemo) nizomslova, brojki i posebnih znakova '_' koji počinjevelikim slovom ili posebnim znakom '_' (A, Ana, A1, A_1, _, _A, ...). Promenljive koje se u klauzuli javljajusamo jednom ne moraju se imenovati i zovu se anonimne promenljive, npr:

pobednik(X) :- pobedio(X,_,_).

znači da je neko nekoga nekad pobedio, pri čemu nijevažno koga i kada. Upotrebom anonimnihpromenljivih gubi se informacija o prirodiargumenata, a svako javljanje znaka za anonimnupromenljivu znači različitu promenljivu, pa je navedenoj klauzuli logički ekvivalentna:

pobednik(X) :- pobedio(X,Suparnik,Vreme).

Page 13: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

STRUKTURE

Strukture su složeni termi koji se formirajuvezivanjem nekoliko jednosatvnih termova. Strukturu u jednu celinu vezuje funktor, koji je jednoznačno određen imenom i brojemargumenata, npr. razlikuje se p(a,b) od p(a(b)). Forma strukture:

funktor(Argument_1, ... , Argument_n).

pri tome je funktor atom, a argumenti sujednostavni ili složeni termi. Strukture se grafičkipredstavljaju pomoću stabla.

Primeri:

voli(marko,tenis).

radnik(jovan, rodjen(17,6,1960),programer).

Konstante i promenljive predstavljajujednostavne terme, a strukture složene.

Page 14: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

OSNOVNI OPERATORI I PREDIKATI U

PROLOG-U:

, (and) Određuje konjunkciju ciljeva.

; (or) Određuje disjunkciju ciljeva.

:- (if) Razdvaja glavu od tela pravila.

! (cut) Operator odsecanja, rez. Cilj kojiuspeva kada se do njega dođe pri izvršavanjunadole, a propada kada se na njega naiđe pritraženju sa vraćanjem, pri čemu propada i ceopredikat u okviru kojeg se rez operator našao.

Page 15: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

OSNOVNI OPERATORI I

PREDIKATI U PROLOG-U:

true Cilj koji uvek uspeva.

false Cilj koji uvek propada. Pogodan je

kada se želi traženje sa vraćanjem.

fail Ovaj predikat nikada ne uspeva i

primorava PROLOG-sistem na vraćanje sa

traženjem. Na taj način se mogu dobiti sva

željena rešenja.

read(P) Omogućava unošenje podataka.

write(P) Omogućava izdavanje podataka.

nl Prelazi u novi red prilikom izdavanja

podataka.

Page 16: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

OSNOVNI OPERATORI I

PREDIKATI U PROLOG-U:

not(P) Ako P uspe tada not(P) propada, a

ako P propadne tada not(P) uspeva. Negacija u

PROLOG-u predstavlja konačan neuspeh.

Predikat not treba upotrebljavati u ciljevima kod

kojih su sve promenljive konkretizovane. Ako sve

promenljive nisu konkretizovane onda not

predikat treba upotrebiti u poslednjem potcilju

glavnog cilja.

Page 17: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

OSNOVNI OPERATORI I

PREDIKATI U PROLOG-U:

Aritmetički operatori:

+ sabiranje,

- oduzimanje,

* množenje,

/ deljenje,

div celobrojno deljenje,

mod deljenje sa ostatkom.

Relacije:

= jednako,

< manje,

<= , =< manje ili jenako,

> veće,

>= , => veće ili jednako,

<> , >< različito.

Page 18: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

NALAŢENJE REŠENJA U PROLOG-U

Primena metode rezolucije u PROLOG-sistemusastoji se u usaglašavanju postavljenog cilja (upita) sačinjenicama i pravilima izvođenja. Pri tome značajnuulogu igra unifikacija.

Postavljeni cilj PROLOG-sistem nastoji da ispuni u skladu sa bazom činjenica i pravila. Ako PROLOG-sistem uspe da ispuni cilj daje pozitivan odgovor (Yes ili True), a u suprotnom negativan (No ili False). Prvo se pokušava ispuniti prvi levi potcilj, pa ukolikoje to moguće sledeći potcilj iza njega, itd. Ako se desida se neki potcilj ne može ispuniti, PROLOG-sistemse vraća na prethodni potcilj i pokušava da ga ispuniza neke druge vrednosti. Ovaj postupak se nastavljasve dok ne budu iscrpljene sve mogućnosti. PROLOG-sistem pretraţuje stablo prema načelu prvo levo i u dubinu. Postupak traženja sa vraćanjem(backtracking) omogućava nalaženje svih rešenja.

Page 19: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

NALAŢENJE REŠENJA U PROLOG-U

Najopštiji unifikator dva terma je supstitucija kojaujedinjuje ta dva terma tako da u njima ostane najvećimogući broj promenljivih.

Unifikacija je definisana na sledeći način:1. Dve strukture se mogu unificirati ako imaju iste funktore i svi

argumenti prve strukture mogu se unificirati saodgovarajućim argumentima druge strukture. Ako strukturasadrži podstrukture unifikacija je rekurzivna.

2. Ako su termi konstante one se mogu unifikovati ako i samoako su identične.

3. Ako je term T1 promenljiva, a term T2 proizvoljan term (promenljiva, konstanta ili struktura) unifikacija se možeizvršiti ako se promenljiva T1 ne javlja u termu T2. Uspešnomunifikacijom promenljiva T1 prima vrednost terma T2, čimetermi T1 i T2 postaju identični. Analogno važi i za slučaj kadaje T2 promenljiva, a T1 proizvoljan term, s tim što tadapromenljiva T2 prima vrednost terma T1.

Page 20: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Primeri:

1) p(X,Y,a) i p(X,Y,Z) se unificiraju za Z=a

2) prva(racunar,X,tastatura,Y) i

prva(Z,ekran,tastatura,stampac)

se unificiraju konkretizacijom promenljivih:

X=ekran Y=stampac Z=racunar

3) prva(racunar,X,tastatura,Y) i

prva(kompjuter,ekran,tastatura,Y)

se ne mogu unifikovati jer se komponente

(konstante) racunar i kompjuter ne mogu

izjednačiti.

Page 21: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

NA SLEDEĆEM PRIMERU BIĆE PRIKAZANA MOGUĆNOST REŠAVANJA

JEDNOG TIPIĈNOG ZADATKA JEZIKA LOGIĈKOG PROGRAMIRANJA.

Neka baza znanja sadrži sledeće uslove:

Ako je osoba X1 muškarac i ako je osoba X1 roditelj Y1 dece, onda je osoba X1 otac Y1 dece.

Pera, Steva i Laza su muškarci.

Pera je roditelj jednog deteta.

Laza je roditelj troje dece.

Minja je roditelj dva deteta.

Odgovoriti na pitanja:

a. Koliko otac Z1 ima dece?

b. Da li je Minja otac dva deteta?

c. Da li je Minja roditelj dva deteta?

d. Koliko otac Pera ima dece?

e. Ko je otac troje dece?

Page 22: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Zadatak će biti rešen pomoću rezolucijske procedure pobijanja i to pomoću programskog jezika PROLOG.

Potrebno je izvršiti formalizaciju na jezikupredikatskog računa prvog reda navedenih uslova ipostavljenog pitanja. Podrazumeva se da supromenljive koje se javljaju u formulama univerzalnokvantifikovane.

Uvode se predikati:

otac(X1,Y1) sa značenjem da je osoba X1 otac Y1 dece

muskarac(X1) sa značenjem da je osoba X1 muškogpola i

roditelj(X1,Y1) sa značenjem da je osoba X1 roditeljY1 dece.

Page 23: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Prema tome uslovi se mogu zapisati kao:

muskarac(X1) roditelj(X1,Y1) otac(X1,Y1)

muskarac(Pera)

muskarac(Steva)

muskarac(Laza)

roditelj(Pera,1)

roditelj(Laza,3)

roditelj(Minja,2)

Prvi uslov predstavlja pravilo, a ostali činjenice.

Page 24: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Sledi formalizacija pitanja (treba utvrditi tačnost sledećihtvrđenja):

a. (Z1)(U1) otac(Z1,U1)

b. otac(Minja,2)

c. roditelj(Minja,2)

d. (U1) otac(Pera,U1)

e. (Z1) otac(Z1,3)

Pošto se dokaz vrši metodom opovrgavanja, pitanja je potrebno negirati, pa ona postaju:

a. otac(Z1,U1)

b. otac(Minja,2)

c. roditelj(Minja,2)

d. otac(Pera,U1)

e. otac(Z1,3)

Univerzalni kvantifikatori se ne moraju pisati.

Page 25: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Program na PROLOG-u koristi konstante; u ovom

slučaju imena osoba, koje se u PROLOG-u moraju

pisati malim slovima. Pitanje počinje simbolom ?-

koji se shvata kao "zar nije", 20. Simbol ?- na

početku pitanju može se tumačiti kao zamena za

simbol . Shodno izloženom, a u skladu sa

sintaksom PROLOG-jezika cilj se zapisuje kao:

a. ?-otac(Z1,U1).

b. ?-otac(minja,2).

c. ?-roditelj(minja,2).

d. ?-otac(pera,U1).

e. ?-otac(Z1,3).

Page 26: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG-program opisuje bazu znanja i zapisuje

se kao:

otac(X1,Y1):-muskarac(X1), roditelj(X1,Y1).

muskarac(pera).

muskarac(steva).

muskarac(laza).

roditelj(pera,1).

roditelj(laza,3).

roditelj(minja,2).

Page 27: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Na osnovu sledećeg programa (Turbo PROLOG ver. 2.0 kompanije Borland International, Inc.):

domains

os=symbol

br=integer

predicates

otac(os,br).

musko(os).

roditelj(os,br).

clauses

otac(X1,Y1):-musko(X1), roditelj(X1,Y1).

musko(pera).

musko(steva).

musko(laza).

roditelj(pera,1).

roditelj(laza,3).

roditelj(minja,2).

Page 28: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG-sistem na postavljeno pitanje (službena reč Goal:označava cilj i zamena je za ?- ):

a. Goal: otac(Z1,U1).

Daje sledeće odgovore:

Z1=pera, U1=1

Z1=laza, U1=3

2 Solutions

što se tumači da postoje dva odgovora (dva rešenja, na dvanačina se može dostići cilj) i da iz prvog odgovora sledi da je Pera otac jednog deteta, a iz drugog da je Laza otac trojedece.

b. Goal: otac(minja,2).

Daje sledeći odgovor:

False

što znači da je odgovor negativan: Minja nije otac dva deteta.

Page 29: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

c. Goal: roditelj(minja,2).

Daje sledeći odgovor:

True

što znači da je odgovor potvrdan: Minja jeste roditelj dva deteta.

d. Goal: otac(pera,U1).

Daje sledeći odgovor:

U1=1

1 Solution

što znači da postoji samo jedan odgovor i on glasi: Pera je otacjednog deteta.

e. Goal: otac(Z1,3).

Daje sledeći odgovor:

Z1=laza

1 Solution

što znači da postoji samo jedan odgovor i on glasi: Laza je otactroje dece.

Page 30: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

IZRAČUNAVANJE ODGOVORA -

REZOLVIRANJE

Specifičnost izvođenja u PROLOG-u, koje se zasniva naSLDNF rezoluciji prikazana je u sledećem primeru.

Program se sastoji od klauzula:

covek(lomonosov). (1)

covek(tolstoj). (2)

covek(sokrat). (3)

grk(sokrat). (4)

rus(lomonosov). (5)

rus(tolstoj). (6)

Na postavljeno pitanje "Da li postoji (u bazi) neko ko je čovek iRus?"

?-covek(X1), rus(X1). (7)

PROLOG-sistem daje odgovore:

X1=lomonosov

X1=tolstoj

2 Solutions

Page 31: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Klauzule programa i cilj su radi lakšeg praćenja izvođenjaobeleženi brojevima od 1 do 7. Ĉvorovi stabla predstavljajuciljne klauzule. Pored grana koje izlaze iz čvorova napisanesu unifikacije koje su u tim koracima izvođenja određene. Rimskim brojevima je obeležen redosled generisanjačvorova u stablu izvođenja. Pretraživanje je dubinsko. Ĉvor uspeha - prazan sastavak obeležen je sa & . Ĉvornema naslednika ukoliko primena koraka izvođenja nijemoguća i na stablu će biti obeležen kao čvor neuspeha.

Stablo izvođenja za ovaj program je sledećeg izgleda:

I ?- covek(X1), rus(X1)

/ lomonosov/X1 (2)| tolstoj/X1 (3)\ sokrat/X1

II ?-rus(lomonosov) IV ?-rus(tolstoj) VI čvor neuspeha

(5)/ (6) \

III & V &

Page 32: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Stablo izvođenja za ovaj program je sledećeg izgleda:

I ?- covek(X1), rus(X1)

/ lomonosov/X1 (2)| tolstoj/X1 (3)\ sokrat/X1

II ?-rus(lomonosov) IV ?-rus(tolstoj) VI čvor neuspeha

(5)/ (6) \

III & V &

U ovom programu, čije stablo izvođenja je prikazano na slici, za postavljeni cilj, tj. za njegovprvi potcilj i prvu odgovarajuću činjenicu ili glavupravila u programu (klauzula (1)), u prvom korakuje izvedena rezolventa, odnosno novi cilj: ?-rus(lomonosov) pri čemu je izvršena unifikacijalomonosov/X1.

Page 33: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Novi cilj rezolvira sa klauzulom (5) i kao rezultat dajeprazan sastavak, što znači da je glavni cilj zadovoljeni da je dobijen jedan odgovor. Zatim se pokušavaposlednji potcilj zadovoljiti još na neki način. Zato je potrebno vratiti se unazad (backtracking), restaurirati promenljive, restaurirati tadašnje stanje ipokušati rezolvirati tadašnju ciljnu klauzulu sasledećom klauzulom čija glava sadrži isti predikat kaoi poslednji predikat u ciljnoj klauzuli. U ovom primerudobija se početna ciljna klauzula: ?-covek(X1), rus(X1) koja sada rezolvira sa klauzulom (2) i kaorezultat daje novi cilj ?-rus(tolstoj), pri čemu je unifikator tolstoj/X1. Novi cilj se ispunjava, tj. dobijase prazan sastavak sa klauzulom (6) i to bi bio drugiodgovor sistema. Pokušaj vraćanja više ne možeuroditi plodom, tako da se na postavljeno pitanjedobijaju samo dva odgovora.

Page 34: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

DEKLARATIVNA I PROCEDURNA

SEMANTIKA PROLOG JEZIKA

Svaka klauzula u PROLOG-u oblika:

A :- B1, B2, ... , Bn.

može se tumačiti na dva načina:

Deklarativno. Glava pravila A je tačna ako su B1 iB2 i ... i Bn tačni.

Procedurno. Da bi se dokazao cilj A moraju se dokazati potciljevi B1 i B2 i ... i Bn .

Deklarativna semantika određuje istinitosno značenjerečenice, a procedurna određuje način njenogizvođenja.

Page 35: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

PROLOG-jezik ima deklarativni karakter i

omogućava korisniku da saopšti sistemu samo šta

treba da uradi, pomoću opisa uslova i ciljeva a ne

i kako, te ovaj jezik pripada klasi opisnih

(neprocedurnih) programskih jezika. Opisi ciljeva

i uslova predstavljaju program napisan na

PROLOG-jeziku. Način obrade ciljeva i uslova

prepušten je PROLOG-sistemu, koji ima

procedurni karakter i predstavlja mehanizam

izvođenja koji je nezavisan od ciljeva i uslova koje

treba zadovoljiti. Deduktivni sistem na osnovu

datih opisa izvodi odgovore i saopštava ih

korisniku. Od korisnika se ne zahteva da detaljno

poznaje procedurni deduktivni sistem.

Page 36: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Kod nalaženja odgovora redosled generisanja

čvorova u stablu izvođenja zavisi od redosleda

klauzula u programu. Klauzule u programu se

obrađuju po redosledu njihovog navođenja; odozgo

prema dole. Promenom redosleda klauzula u

programu došlo bi do generisanja drugačijeg

stabla pretraživanja. Redosled potciljeva takođe

dovodi do drugačijeg redosleda u generisanju

odgovora.

Page 37: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Ako se u bazi iz prethodno navedenog primera

promeni redosled činjenica, npr. ako su samo 1. i

2. činjenica uzajamno promenile mesta, dobija se

program:

covek(tolstoj). (1)

covek(lomonosov). (2)

covek(sokrat). (3)

grk(sokrat). (4)

rus(lomonosov). (5)

rus(tolstoj). (6)

Page 38: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Ovaj program je deklarativno ekvivalentan programuiz prethodnog primera.

No, na pitanje

?-covek(X1), rus(X1). (7)

sistem daje odgovore:

X1=tolstoj

X1=lomonosov

2 Solutions

Može se videti da je promenom redosleda činjenica u programu izmenjen i redosled dobijenih odgovora. Naime, u obe varijante programa dobijena su po dvaodgovora, ali su u prvoj varijanti programa dobijeniodgovori da su osobe koje zadovoljavaju zadatekriterijum Lomonosov i Tolstoj, a u drugoj varijantiprograma da su to Tolstoj i Lomonosov.

Page 39: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Stablo izvođenja za ovu, drugu varijantu programa je:

I ?- covek(X1), rus(X1)

(1)/ tolstoj/X1 (2)| lomonosov/X1 (3)\ sokrat/X1

II ?-rus(tolstoj) IV ?-rus(lomonosov) VI čvor neuspeha

(6) / (5) \

III & V &

Page 40: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Promena redosleda potciljeva u cilju takođe utiče

na izgled stabla izvođenja. Ukoliko se samo u

pitanju promeni redosled potciljeva:

?-rus(X1), covek(X1).

Sistem daje ponovo dva odgovora ali po sledećem

redosledu:

X1=lomonosov

X1=tolstoj

2 Solutions

Page 41: PROLOG - University of Novi Sad VI PROLOG I deo.pdfuradi, a ne KAKO da rešiproblem kao u konvencionalnim procedurnim jezicima (Pascal, FORTRAN, COBOL). Predikatski računprvog reda

Stablo izvođenja za ovu varijantu programa je:

I ?-rus(X1), covek(X1)

(5) / lomonosov/X1 (6) \ tolstoj/X1

II ?-covek(lomonosov) IV ?-covek(tolstoj)

(2) / (1) \

III & V &

Iz stabala pretraživanja, se vidi da je drugačiji redosledzadovoljavanja ciljeva u drugoj i trećoj varijati programa, što prouzrokuje i drugačiji redosled u saopštavanjuodgovora. Iako su odgovori dobijeni u trećoj varijantiprograma po redosledu identični odgovorima dobijenim u prvoj varijanti oni se procedurno razlikuju; njihova stablapretraživanja su drugačija. Sve tri izložene varijanteprograma su deklarativno ekvivalentne, a procedurnoneekvivalentne.