(* zadatak pod a *) fun spoji(nil,nil) = nil | spoji(h1::t1,h2::t2) = [h1]@[h2]@spoji(t1,t2); fun f1(s1,s2) = implode(spoji(explode s1,explode s2)); (* zadatak pod b *) fun prva(l,duzina,0) = nil | prva(h::t,duzina,brojac) = if(brojac mod 2 = 0) then [h]@prva(t,duzina,brojac-1) else prva(t,duzina,brojac-1); fun druga(l,duzina,0) = nil | druga(h::t,duzina,brojac) = if(brojac mod 2 = 1) then [h]@druga(t,duzina,brojac-1) else druga(t,duzina,brojac-1); fun inverz s = [implode(prva(explode s,size s,size s))]@[implode(druga(explode s,size s,size s))]; (* zadatak pod c *) fun obrnipar(a,b) = (b,a); fun f2 nil = nil | f2(h::t) = f2(t)@[obrnipar(h)]; (* zadatak pod d *) fun lista nil = nil | lista(h::t) = [f1(h)]@lista(t); fun poredi(nil,l2,kopija1,kopija2)=kopija2 | poredi(l1,nil,kopija1,kopija2)=kopija1 | poredi(h1::t1,h2::t2,kopija1,kopija2)= if ord(h1)ord(h2) then kopija1 else poredi(t1,t2,kopija1,kopija2)); (* fja poredi poredi leksikografski stringove *) fun ubaci(x,nil) = [x] | ubaci(x,h::t) = if implode(poredi(explode x,explode h,explode x,explode h))=x then x::h::t else h::ubaci(x,t); fun sort nil = nil | sort(h::t) = ubaci(h, sort t); fun f3 l = hd(sort(lista l));