(* Munir les paires d'entiers d'un ordre total *)

module IntPair = struct

  type t = int * int

  (* on commence par une fonction comparant deux entiers *)
  let cmp x y = if x < y then -1 else if x = y then 0 else 1

  (* on l'utilise ensuite pour définir un ordre lexicographique
     sur les paires d'entiers *)
  let compare (x1, y1) (x2, y2) =
    let c = cmp x1 x2 in
    if c <> 0 then c else cmp y1 y2

  (* note : on pouvait bien sûr utiliser directement Pervasives.compare
     sur une paires d'entiers, avec le même résultat, mais on a préféré
     ici l'écrire nous-même. *)

end

(* On peut alors appliquer le foncteur de l'exercice précédent
   pour obtenir des ensembles de paires d'entiers. *)

module type ELT = sig
  type t
  val compare: t -> t -> int
end

module Set(E: ELT) = struct
  (* voir exercice 2.43 *)
end

module SetIntPair = Set(IntPair)


This document was generated using caml2html