Zbirka zadataka iz Ekspertskih sistema
Zbirka zadataka iz Ekspertskih sistema
Zbirka zadataka iz Ekspertskih sistema
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)