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 79<br />

1 2 3<br />

1.1 1.2 1.3 3.1 3.2 3.3<br />

Slika 67<br />

Ovakav način rešavanja problema, kada se polazi od krajnjeg cilja, uz dekompoziciju na<br />

podciljeve sve dok se svi podciljevi ne zadovolje, naziva se povratno ulančavanje. U<br />

konkretnom slučaju, problem je pogodan za rekurzivno rešenje dato sledećim programima na<br />

PROLOG-u i Lisp-u:<br />

Rešenje<br />

Program napisan na Scheme Lisp-u:<br />

(define (hanoi n)<br />

(transfer ‘1 ‘3 ‘2 n))<br />

(define (pomeri sa na)<br />

(list (list ‘pomeri ‘disk ‘sa sa ‘na na)))<br />

(define (transfer sa na rez n)<br />

(cond ((= n 1) (pomeri sa na))<br />

(else (append (transfer sa rez na (- n 1))<br />

(pomeri sa na)<br />

(transfer rez na sa (- n 1))))))<br />

Za slučaj tri diska program ispisuje sledeći n<strong>iz</strong> poteza:<br />

((POMERI DISK SA 1 NA 3) (POMERI DISK SA 1 NA 2) (POMERI DISK SA 3<br />

NA 2) (POMERI DISK SA 1 NA 3) (POMERI DISK SA 2 NA 1) (POMERI DISK<br />

SA 2 NA 3) (POMERI DISK SA 1 NA 3))<br />

Program napisan na Turbo Prolog-u:<br />

domains<br />

diskova=integer<br />

stub=jedan;dva;tri<br />

predicates<br />

hanoi(diskova)<br />

pomeri(diskova,stub,stub,stub)<br />

ispisi(stub,stub)<br />

clauses<br />

hanoi(N) :-pomeri(N,jedan,dva,tri).<br />

pomeri(1,S1,_,S3) :-ispisi(S1,S3),!.

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

Saved successfully!

Ooh no, something went wrong!