; load "Int"; ; load "Listsort"; val sort = Listsort.sort Int.compare (* Aufgabe 4.1 *) fun last xs = hd (rev xs) (* Aufgabe 4.2 *) fun enum (m,n) = if m<=n then m::enum(m+1,n) else nil (* Aufgabe 4.3 *) fun nth(xs,n) = if n<0 orelse null xs then raise Subscript else if n=0 then hd xs else nth(tl xs, n-1) fun take(xs,n) = if n=0 then nil else if n<0 orelse null xs then raise Subscript else hd xs :: take(tl xs, n-1) fun drop(xs,n) = if n=0 then xs else if n<0 orelse null xs then raise Subscript else drop(tl xs, n-1) (* Aufgabe 4.4 *) fun max xs = if null xs then raise Empty else foldl (fn (x,m) => if x<=m then m else x) (hd xs) (tl xs) (* Aufgabe 4.5 *) fun member x nil = false | member x (y::yr) = x=y orelse member x yr fun member x = List.exists (fn y => x=y) fun member x = foldl (fn (y,b) => x=y orelse b) false (* Aufgabe 4.6 *) fun count y = foldl (fn (x,n) => if x=y then n+1 else n) 0 (* Aufgabe 4.7 *) fun dec x = if x<10 then [x] else dec(x div 10) @ [x mod 10] fun int ds = foldl (fn (d,x) => 10*x+d) 0 ds (* Aufgabe 4.8 *) fun perm (xs,ys) = sort xs = sort ys (* Aufgabe 4.9 *) fun partition x nil = (nil, nil) | partition x (y::yr) = let val (us,vs) = partition x yr in if y if y