Ajout de la fonction [subset].
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1519 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
85b978bce3
commit
910aafd580
|
@ -33,6 +33,7 @@ module type S =
|
|||
val diff: t -> t -> t
|
||||
val compare: t -> t -> int
|
||||
val equal: t -> t -> bool
|
||||
val subset: t -> t -> bool
|
||||
val iter: (elt -> 'a) -> t -> unit
|
||||
val fold: (elt -> 'a -> 'a) -> t -> 'a -> 'a
|
||||
val cardinal: t -> int
|
||||
|
@ -217,6 +218,21 @@ module Make(Ord: OrderedType) =
|
|||
let equal s1 s2 =
|
||||
compare s1 s2 = 0
|
||||
|
||||
let rec subset s1 s2 =
|
||||
match (s1, s2) with
|
||||
Empty, _ ->
|
||||
true
|
||||
| _, Empty ->
|
||||
false
|
||||
| Node (l1, v1, r1, _), (Node (l2, v2, r2, _) as t2) ->
|
||||
let c = Ord.compare v1 v2 in
|
||||
if c = 0 then
|
||||
subset l1 l2 && subset r1 r2
|
||||
else if c < 0 then
|
||||
subset (Node (l1, v1, Empty, 0)) l2 && subset r1 t2
|
||||
else
|
||||
subset (Node (Empty, v1, r1, 0)) r2 && subset l1 t2
|
||||
|
||||
let rec iter f = function
|
||||
Empty -> ()
|
||||
| Node(l, v, r, _) -> iter f l; f v; iter f r
|
||||
|
|
|
@ -64,6 +64,9 @@ module type S =
|
|||
val equal: t -> t -> bool
|
||||
(* [equal s1 s2] tests whether the sets [s1] and [s2] are
|
||||
equal, that is, contain the same elements. *)
|
||||
val subset: t -> t -> bool
|
||||
(* [subset s1 s2] tests whether the set [s1] is a subset of
|
||||
the set [s2]. *)
|
||||
val iter: (elt -> 'a) -> t -> unit
|
||||
(* [iter f s] applies [f] in turn to all elements of [s], and
|
||||
discards the results. The elements of [s] are presented to [f]
|
||||
|
|
Loading…
Reference in New Issue