24.12.2012 Views

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.3. Primeri na Prolog-u i LISP-u 65<br />

(< (distance (car a) with-respect-to)<br />

(distance (car b) with-respect-to)))<br />

(define (sort l f)<br />

(sort1 () l f))<br />

(define (sort1 s l f)<br />

(if (null? l) s<br />

(sort1 (insert s (car l) f) (cdr l) f)))<br />

(define (insert l e f)<br />

(cond ((null? l) (list e))<br />

((f e (car l)) (cons e l))<br />

(else (cons (car l) (insert (cdr l) e f))))<br />

Funkcija best, čijim pozivom započinje pretraga, ima za parametre startni i ciljni čvor. Ova<br />

funkcija služi samo za inicijal<strong>iz</strong>aciju parametara rekurzivne funkcije best1 koja vrši<br />

pretraživanje.<br />

Red queue, prvi parametar funkcije best1 predstavljen je listom parcijalnih putanja od<br />

korena do otkrivenih a neobiđenih čvorova stabla pretrage na isti način kao u programu <strong>iz</strong><br />

zadatka 26. Svaka parcijalna putanja je lista čvorova od lista stabla pretrage prema korenu.<br />

Vođenje evidencije o obrađenim parcijalnim putanjama potrebno je radi <strong>iz</strong>begavanja<br />

zatvorenih puteva u grafu pretrage. Inicijalno se red sastoji samo od jedne putanje koja se<br />

opet sastoji samo od korenog čvora.<br />

U okviru funkcije best1, na početku se ispisuje tekuća vrednost promenljive queue da bi se<br />

mogao pratiti tok pretrage. Prva grana u cond strukturi odnosi se na slučaj neupešne pretrage,<br />

kada se red isprazni a da nije pronađena putanja do ciljnog čvora. Tada se ispisuje<br />

odgovarajuća poruka i okončava pretraga.<br />

Druga grana cond strukture odnosi se na slučaj kada se prva putanja u redu završava u<br />

ciljnom čvoru. Tada se kao rezultat pretrage vraća ova putanja. Funkcijom reverse postiže<br />

se da u listi čvorova koji sačinjavaju rešenje prvi čvor bude startni.<br />

Podrazumevana (else) grana cond strukture odnosi se na slučaj kada pretragu treba nastaviti<br />

produžavanjem parcijalne putanje sa početka reda. Funkcija expand koja kao argument<br />

uzima tekuću parcijalnu putanju, vraća kao rezultat n<strong>iz</strong> novih parcijalnih putanja nastalih<br />

produžavanjem tekuće putanje, to jest, ekspanzijom tekućeg čvora stabla pretrage. Ovu<br />

funkciju potrebno je napisati za svaki konkretan problem pretrage posebno u zavisnosti od<br />

načina predstavljanja stanja problema.<br />

U skladu sa definicijom algoritma ‘prvo najbolji’, nove parcijalne putanje koje su rezultat<br />

funkcije expand dodaju se u listu parcijalnih putanja queue (primitiva append) a zatim se<br />

kompletna lista sortira funkcijom sort. Treba primetiti da je redosled primene operacija<br />

append i sort obrnut nego kod programa <strong>iz</strong> zadatka 16.<br />

U svrhu poređenja parcijalnih putanja pri sortiranju koristi se funkcija (closerp X Y<br />

finish) koja je ista kao i u zadatku 26.

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

Saved successfully!

Ooh no, something went wrong!