list a ::= Nil | Cons a (list a); ;; if c t f = case c of True -> t; False -> f end; f223 x y = (if (x == 0) y (f223 (x - 1) y)); fac n acc = if (n==0) acc (fac (n-1) (n*acc)); f2232 x y z p = if (p==0) (x+z) ( (f2232 y 0 0 (p-1)) + (f2232 z z 0 (p-1)) ); append x y = case x of Nil -> y; Cons a as -> Cons a (append as y) end; qsort l = letrec bigs = \d l2 -> case l2 of Nil -> Nil; Cons l2x l2xs -> case l2x>d of True -> Cons l2x (bigs d l2xs); False -> bigs d l2xs end end; smalls = \d l2 -> case l2 of Nil -> Nil; Cons l2x l2xs -> case l2x<=d of True -> Cons l2x (smalls d l2xs); False -> smalls d l2xs end end in case l of Nil -> Nil; Cons h t -> append (qsort (smalls h t)) (Cons h (qsort (bigs h t))) end; {-----------------------------------------------------------------} {--- set stuff ---} {-----------------------------------------------------------------} utSetEmpty = Nil; utSetIsEmpty s = case s of Nil -> True; Cons x xs -> False end; utSetSingleton x = Cons x Nil; utSetFromList l = letrec rmdup = \rl -> case rl of Nil -> Nil; Cons x xs -> case xs of Nil -> Cons x Nil; Cons y ys -> case x==y of True -> Cons x (rmdup ys); False -> Cons x (Cons y (rmdup ys)) end end end; sort = \sl -> letrec insert = \a l -> case l of Nil -> Cons a Nil; Cons bb xx -> case a <= bb of True -> Cons a (Cons bb xx); False -> Cons bb (insert a xx) end end in case sl of Nil -> Nil; Cons a x -> insert a (sort x) end in rmdup (sort l); utSetToList xs = xs;