equal
deleted
inserted
replaced
172 val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool |
172 val has_duplicates: ('a * 'a -> bool) -> 'a list -> bool |
173 |
173 |
174 (*lists as multisets*) |
174 (*lists as multisets*) |
175 val remove1: ('b * 'a -> bool) -> 'b -> 'a list -> 'a list |
175 val remove1: ('b * 'a -> bool) -> 'b -> 'a list -> 'a list |
176 val combine: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list |
176 val combine: ('a * 'a -> bool) -> 'a list -> 'a list -> 'a list |
|
177 val submultiset: ('a * 'b -> bool) -> 'a list * 'b list -> bool |
177 |
178 |
178 (*orders*) |
179 (*orders*) |
179 val is_equal: order -> bool |
180 val is_equal: order -> bool |
180 val rev_order: order -> order |
181 val rev_order: order -> order |
181 val make_ord: ('a * 'a -> bool) -> 'a * 'a -> order |
182 val make_ord: ('a * 'a -> bool) -> 'a * 'a -> order |
861 fun remove1 eq x [] = [] |
862 fun remove1 eq x [] = [] |
862 | remove1 eq x (y :: ys) = if eq (x, y) then ys else y :: remove1 eq x ys; |
863 | remove1 eq x (y :: ys) = if eq (x, y) then ys else y :: remove1 eq x ys; |
863 |
864 |
864 fun combine eq xs ys = fold (remove1 eq) ys xs @ ys; |
865 fun combine eq xs ys = fold (remove1 eq) ys xs @ ys; |
865 |
866 |
|
867 fun submultiset _ ([], _) = true |
|
868 | submultiset eq (x :: xs, ys) = member eq ys x andalso submultiset eq (xs, remove1 eq x ys); |
|
869 |
866 |
870 |
867 |
871 |
868 (** orders **) |
872 (** orders **) |
869 |
873 |
870 fun is_equal EQUAL = true |
874 fun is_equal EQUAL = true |