% Program za rjesavanje problema "majmuna i banane" % Na problem mozemo gledati kao na igru za jednog igraca % u kojoj se nizom poteza pokusava doci do zavrsnog % (pobjednickog) stanja. % Informaciju o stanju u igri je zgodno objediniti % jednim strukturiranim objektom - % stanje(polozaj_majmuna, objekt_na_kojem_majmun_stoji, % polozaj_kutije, moze_li_majmun_pojesti_bananu) % Pocetno stanje se tada opisuje na slijedeci nacin: % stanje(kod_vrata, na_podu, kod_prozora, ne_moze). % Pobjednicko stanje ima oblik: % stanje(_,_,_,moze) % gdje _ predstavlja varijablu cija je vrijednost proizvoljna % Definirana su cetiri poteza kojima igrac moze promijeniti stanje: % - uhvati bananu (zgrabi) % - popni se na kutiju (popni_se) % - guraj stolicu (guraj) % - hodaj (hodaj) % Mogucnost odabira poteza, naravno, ovisi o stanju. Tako % majmun ne moze uhvatiti bananu ako se nije popeo na kutiju, ne moze se % popeti na kutiju ako se ne nalazi pored nje te ne moze gurati kutiju % ako se nalazi na kutiji ili je udaljen od nje. % Potezi hodaj i guraj su predstavljeni dvoclanim strukturama u kojima % prvi clan predstavlja pocetnu, a drugi odredisnu lokaciju. % Dozvoljeni potezi su modelirani relacijom potez(S1,Potez,S2) koja je % istinita ako se potezom Potez moze prijeci iz stanja S1 u stanje S2 potez(stanje(sredina_sobe,na_kutiji,sredina_sobe,ne_moze), zgrabi, stanje(sredina_sobe,na_kutiji,sredina_sobe,moze)). potez(stanje(P,na_podu,P,H), popni_se, stanje(P,na_kutiji,P,H)). potez(stanje(P1,na_podu,P1,H), guraj(P1,P2), stanje(P2,na_podu,P2,H)). potez(stanje(P1,na_podu,P,H), hodaj(P1,P2), stanje(P2,na_podu,P,H)). % Glavna relacija u programu je moze_pojesti(S) % Ona je istinita ako majmun iz stanja S % moze dohvatiti bananu izravno... moze_pojesti(stanje(_,_,_,moze)). % ...ili nakon niza poteza. moze_pojesti(S):- potez(S,_,S1), moze_pojesti(S1).