24.12.2012 Views

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

(define (expand path)<br />

(delq! () (mapcar (lambda (child)<br />

(if (member child (cdr path))<br />

()<br />

(cons child path)))<br />

(get (car path) ‘children))))<br />

Funkcija (get l p) vraća vrednost osobine p za čvor l grafa pretrage. Ona koristi primitivu<br />

assoc koja ima dva argumenta: prvi je osobina, a drugi asocijativna lista. Primitiva assoc<br />

vraća uređeni par (osobina, vrednost) <strong>iz</strong> asocijativne liste.<br />

Funkcija (distance n1 i n2) koristi se da odredi međusobnu udaljenost dva čvora n1 i<br />

n2. Funkcija distance poziva se od strane funkcije closerp (koja je navedena pod a) da<br />

odredi udaljenost nekog čvora od ciljnog čvora finish. Pošto je drugi argument uvek ciljni<br />

čvor, funkcija u stvari <strong>iz</strong>računava vrednost heurističke funkcije prvog argumenta prema<br />

formuli datoj u postavci zadatka koristeći pomoćnu funkciju square za kvadriranje.<br />

Funkcija expand real<strong>iz</strong>uje ekspanziju čvora stabla pretrage. Funkcijski poziv (expand<br />

path) kao rezultat vraća listu parcijalnih putanja nastalih produžavanjem parcijalne putanje<br />

path čvorovima - naslednicima krajnjeg čvora na putanji path.<br />

Ekspanzija je real<strong>iz</strong>ovana uz korišćenje primitive (mapcar f l) koja redom primenjuje<br />

funkciju f na svaki član liste l i vraća listu dobijenih rezultata. U konkretnom slučaju, lista l<br />

sadrži čvorove naslednike krajnjeg čvora putanje path i dobija se pozivom funkcije (get<br />

(car path) ‘children)). Funkcija f je neimenovana (lambda) funkcija koja, kada se<br />

primeni na čvor child <strong>iz</strong> liste l vraća putanju path produženu čvorom child. Ovo važi u<br />

slučaju kada se čvor child ne nalazi već od ranije u listi path (primitiva (member p l)<br />

ispituje da li je p element liste l) . U suprotnom slučaju, vraća se prazna lista kao rezultat<br />

lambda funkcije da bi se sprečilo stvaranje zatvorenih putanja u stablu pretrage.<br />

Najzad, rezultat funkcije mapcar, odnosno lista novih parcijalnih putanja nastalih<br />

ekspanzijom, obrađuje se primitivom delq! da bi se dobio konačan rezultat funkcije<br />

expand. Primitiva (delq! p l) <strong>iz</strong> liste l <strong>iz</strong>bacuje sve elemente koji imaju vrednost p. U<br />

konkretnom slučaju, <strong>iz</strong> liste parcijalnih putanja <strong>iz</strong>bacuju se svi elementi koji imaju vrednost<br />

prazne liste (), a koji se mogu pojaviti u listi parcijalnih putanja kao rezultat lambda<br />

funkcije.<br />

Diskusija<br />

Pretraga za problem definisan u tački b) inicira se pozivom (hill ‘A ‘H). Program pri<br />

<strong>iz</strong>vršavanju ispisuje:<br />

RED ((A))<br />

RED ((E A) (D A) (B A) (C A))<br />

RED ((B E A) (D A) (B A) (C A))<br />

RED ((D A) (B A) (C A))<br />

RED ((H D A) (F D A) (C D A) (B A) (C A))<br />

RESENJE (A D H)

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

Saved successfully!

Ooh no, something went wrong!