1(* ------------------------------------------------------------------------- 2 Set 3 ------------------------------------------------------------------------- *) 4 5structure Set :> Set = 6struct 7 8 fun mem (i, l) = List.exists (fn x => x = i) l 9 10 fun insert (i, l) = if mem (i, l) then l else i :: l 11 12 fun mk [] = [] 13 | mk (h :: t) = if mem (h, t) then mk t else h :: mk t 14 15 fun diff (s1, s2) = List.filter (fn x => not (mem (x, s2))) s1 16 fun intersect (s1, s2) = List.filter (fn x => mem (x, s2)) s1 17 fun isSubset (s1, s2) = List.all (fn x => mem (x, s2)) s1 18 19 fun equal (s1, s2) = 20 List.length s1 = List.length s2 andalso intersect (s1, s2) = s1 21 22 fun union ([], s) = s 23 | union (s, []) = s 24 | union (h :: t, s) = union (t, insert (h, s)) 25 26end (* structure Set *) 27