Operacije nad listama 1. Unesi u ljusku Prologa program koji sadrzi definicije predikata clan/2, povezi/3, dodaj/3, obrisi/3, umetni/3, podlista/3, permutacija/3 (broj iza kose crte nakon imena predikata oznacava broj argumenata). Osmisli i isprobaj upite kojima se upotrebom spomenutih predikata rjesavaju jednostavni zadaci kao npr: * obrisi sve clanove zadane liste koji se u listi javljaju nakon podliste [z,z,z]; * za zadanu listu mjeseci u godini, pronad/i mjesece koji se u listi javljaju prije, odnosno poslije svibnja; * za zadanu listu mjeseci u godini, pronad/i neposredni sljedbenik odnosno prethodnik mjeseca srpnja; * obrisi prvog i zadnja tri elementa zadane liste L. Radi jednostavnosti, mozes definirati pomocni predikat mjeseci/1: mjeseci(L):- =(L,[sijecanj,veljaca,ozujak,travanj, svibanj,lipanj, srpanj, kolovoz, rujan, listopad, studeni, prosinac]). = jest predikat unifikacije. Koja je njegova namjena? 2. Napisi program za predikat staviNaKraj(X,Lista,NovaLista) koji listu NovaLista gradi tako da objekt X, stavlja na kraj liste List. 3. Definiraj relaciju posljednji(Clan, Lista) koja vrijedi ako je objekt Clan posljednji element liste Lista. Program napisi sa i bez upotrebe predikata povezi/3. 4. Napisi proceduru okreni(L, D) koja gradi listu D tako da okrene redoslijed elemenata liste L. Vrijedi npr. okreni([a,b,c],[c,b,a]). 5. Definiraj relaciju rotirajLijevo(L,R) koja vrijedi ako se lista R moze dobiti kruznim posmakom elemenata liste L ulijevo. Tako npr. vrijedi rotirajLijevo([1,2,3,4,5], [2,3,4,5,1]). Kako bi definirao predikat rotirajDesno/2? 6. Definiraj proceduru podskup(Podskup, Skup) koja vrijedi ako su svi elementi liste Podskup ujedno i elementi liste Skup. Pored toga, neka procedura moze potraziti sve podskupove danog skupa kao u primjeru: ?-podskup(X, [a,b,c]). 7. Napisi modifikaciju programa za problem majmuna i banane. Definiraj relaciju moze_uzeti(Stanje, Akcije) tako da program ne odgovara samo sa da ili ne, nego da u listu Akcije upise jos i redoslijed poteza koji vodi do uspjeha. Tako se na upit ?-moze_uzeti(stanje(kod_vrata,na_podu,kod_prozora,ne_moze), Akcije). ocekuje odgovor Akcije=[hodaj(kod_vrata, kod_prozora), guraj(kod_prozora, sredina_sobe), popni_se, zgrabi]. 8. Definiraj predikat izravnaj(Lista,RavnaLista) koji gradi listu RavnaLista iz svih atoma liste Lista koja moze sadrzavati i druge liste. Tako npr. vrijedi: ?-izravnaj([a,b,[c,d],[],[[[e]]],f],[a,b,c,d,e,f]).