Osnovi programiranja i programski jezici

Osnovi programiranja i programski jezici Osnovi programiranja i programski jezici

carstvolokvanja.com
from carstvolokvanja.com More from this publisher
06.04.2015 Views

Za razliku od proceduralnih jezika, prilikom programiranja na deskriptivnom jeziku, programer opisuje ŠTA program treba da radi. U ovom slučaju glavni posao oko načina rešavanja zadatka treba da uradi interpretator (izvršilac) programa. PROLOG je jedan od najpoznatijih predstavnika klase deskriptivnih jezika. OSNOVE PROLOG-A Teorijsku osnovu PROLOG-a čini predikatski račun prvog reda. Međutim, postupak nalaženja rešenja u PROLOG-u zasniva se na principu rezolucije za automatsko dokazivanje teorema koji je pronašao J. Robinson 1965. godine. U stvari, radi se o jednoj modifikaciji principa rezolucije za tzv. Hornove disjunkte. Naime, osnovni elementi PROLOG-a nazivaju se Hornovi disjunkti (klauzule) i predstavljaju rečenice oblika: AKO c1, c2, … cn ONDA c. Ovo se može zapisati i ovako: c ako c1, c2, …, cn. ili u običajenoj notaciji gde se umesto reči ako koristi spacijalni simbol :- (tzv. vrat-simbol jer spaja glavu predikata c sa telom: c1, c2, …, cn) c:-c1, c2, …, cn. Predikati koji nemaju telo nazivaju se činjenice u PROLOG-u. Predikati bez glave nazivaju se ciljevi ili upiti. U opštem slučaju, u matematičkoj logici, pogodbene rečenice mogu imati oblik: AKO p1, p2, …, pn ONDA c1, c2, …, ck. Ovde je reč o klauzuli koja ima više glava i takve klauzule se koriste u PROLOG-u. Ako klauzula ima samo jednu glavu ili nema glavu, tada se naziva Hornova klauzula. Princip rezolucije u PROLOG-u primenjuje se na Hornove klauzule. Sve činjenice u PROLOG-u tretiraju se kao apsolutne istine tj. aksiome. Primena metoda rezolucije sastoji se u usaglašavanju postavljenog cilja (upita) sa činjenicama, tj. bazom podataka. Naime, ako je postavljen cilj, PROLOG nastoji da ispuni taj cilj u skladu sa bazom činjenica i pravila. Ako PROLOG u svom nastojanju uspe da ispuni cilj, daje pozitivan odgovor (‘YES’), u suprotnom negativan (‘NO’). O PROGRAMIRANJU U PROLOGU NAČIN REŠAVANJA PROBLEMA U PROLOG-U U Hornovim klauzulama c1, c2, …, cn su klauzule (rečenice) koje mogu sadržati konstante i promenljive. Elementi c1, c2, …, cn nazivaju se potciljevi. Glavni cilj 116

može uspeti (biti ispunjen) ako uspe svaki potcilj u okviru glavnog cilja. Prema tome, glavni cilj: :- c1, c2, …, cn (koji ćemo označavati i na sledeći način: ?-c1, c2, …, cn) predstavlja konjunkciju potciljeva: c1, c2, …, cn. Svaki potcilj može se shvatiti kao poziv procedure. Procedure se zadaju preko predikata sa odgovarajućim imenom i odgovarajućim brojem argumenata. Potciljevi se ispunjavaju u procesu nalaženja rešenja, tj. u procesu izračunavanja. Proces rešavanja može da se razgrana različitim putevima i da generiše više različitih rešenja. U procesu ispunjavanja (zadovoljavanja) cilja mogu nastati tri slučaja: • proces traženja se završava i daje određeno rešenje, u ovom slučaju reč je o uspešnom ispunjenju cilja, • proces traženja se završava neuspešno i ne daje rezultat, tj. cilj nije ispunjen, • proces traženja se ne okončava i ne daje nikakav rezultat. U prvom i drugom slučaju reč je o završenom izračunavanju, a u trećem slučaju o nezavršenom. Za svaki cilj postoji potpun prostor izračunavanja koji može da se razmatra kao skup svih puteva duž kojih se može tražiti. Duž nekog od tih puteva može se uspešno okončati traženje, duž nekog traženja se završava neuspešno, a duž nekih traženja može da se ne završi. Potpun prostor izračunavanja određen je ciljem i pravilima za izračunavanje. PROLOG ispunjava gavni cilj tako što ispunjava svaki potcilj u okviru cilja. Standardni način zadovoljavanja potciljeva realizuje se počev od prvog levog potcilja. Ukoliko se ispuni prvi levi potcilj, PROLOG nastoji da ispuni prvi potcilj iza njega itd. Ako u procesu ispunjavanja neki potcilj ne može biti ispunjen, PROLOG se vraća na prethodni potcilj i nastoji da ga ispuni za neke druge vrednosti. Taj postupak se nastavlja sve dok ne budu iscrpljene sve mogućnosti. Postupak traženja se vraćanjem (backtracking) omogućava nalaženje svih rešenja iz skupa mogućih rešenja i karakterističan je za PROLOG. Navedimo primer na kojem će biti konkretno objašnjeni prethodno pomenuti pojmovi. Neka je dat sledeći PROLOG-program: Vozac(pavle). Vozac(marko). Vozac(X):- dobar_vozac(X). Dobar_vozac(X):- ne_pije(X), vozac_autobusa(X). Dobar_vozac(janko). Ne_pije(dusan). 117

može uspeti (biti ispunjen) ako uspe svaki potcilj u okviru glavnog cilja. Prema<br />

tome, glavni cilj:<br />

:- c1, c2, …, cn<br />

(koji ćemo označavati i na sledeći način: ?-c1, c2, …, cn) predstavlja konjunkciju<br />

potciljeva: c1, c2, …, cn. Svaki potcilj može se shvatiti kao poziv procedure.<br />

Procedure se zadaju preko predikata sa odgovarajućim imenom i odgovarajućim<br />

brojem argumenata.<br />

Potciljevi se ispunjavaju u procesu nalaženja rešenja, tj. u procesu izračunavanja.<br />

Proces rešavanja može da se razgrana različitim putevima i da generiše više različitih<br />

rešenja.<br />

U procesu ispunjavanja (zadovoljavanja) cilja mogu nastati tri slučaja:<br />

• proces traženja se završava i daje određeno rešenje, u ovom slučaju reč<br />

je o uspešnom ispunjenju cilja,<br />

• proces traženja se završava neuspešno i ne daje rezultat, tj. cilj nije<br />

ispunjen,<br />

• proces traženja se ne okončava i ne daje nikakav rezultat.<br />

U prvom i drugom slučaju reč je o završenom izračunavanju, a u trećem slučaju o<br />

nezavršenom.<br />

Za svaki cilj postoji potpun prostor izračunavanja koji može da se razmatra kao skup<br />

svih puteva duž kojih se može tražiti. Duž nekog od tih puteva može se uspešno<br />

okončati traženje, duž nekog traženja se završava neuspešno, a duž nekih traženja<br />

može da se ne završi. Potpun prostor izračunavanja određen je ciljem i pravilima za<br />

izračunavanje.<br />

PROLOG ispunjava gavni cilj tako što ispunjava svaki potcilj u okviru cilja.<br />

Standardni način zadovoljavanja potciljeva realizuje se počev od prvog levog potcilja.<br />

Ukoliko se ispuni prvi levi potcilj, PROLOG nastoji da ispuni prvi potcilj iza njega<br />

itd. Ako u procesu ispunjavanja neki potcilj ne može biti ispunjen, PROLOG se vraća<br />

na prethodni potcilj i nastoji da ga ispuni za neke druge vrednosti. Taj postupak se<br />

nastavlja sve dok ne budu iscrpljene sve mogućnosti. Postupak traženja se vraćanjem<br />

(backtracking) omogućava nalaženje svih rešenja iz skupa mogućih rešenja i<br />

karakterističan je za PROLOG.<br />

Navedimo primer na kojem će biti konkretno objašnjeni prethodno pomenuti pojmovi.<br />

Neka je dat sledeći PROLOG-program:<br />

Vozac(pavle).<br />

Vozac(marko).<br />

Vozac(X):- dobar_vozac(X).<br />

Dobar_vozac(X):- ne_pije(X), vozac_autobusa(X).<br />

Dobar_vozac(janko).<br />

Ne_pije(dusan).<br />

117

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!