module Pre_Pile =
struct
type 'a pile = 'a list ref
let créer() = ref []
let ajouter x p = p := x :: !p
exception Vide
let retirer p =
match !p with
| [] -> raise Vide
| x::t -> p:= t; x
end;;
module type PILE =
sig
type 'a pile
val créer : unit -> 'a pile
exception Vide
val ajouter : 'a -> 'a pile -> unit
val retirer : 'a pile -> 'a
end;;
module Pile = (Pre_Pile : PILE);;
module type CPILE =
sig
include PILE
val consulter : 'a pile -> 'a
end
module Cpile : CPILE = struct
open Pre_Pile
type 'a pile = 'a Pre_Pile.pile
let créer = créer
exception Vide = Vide
let ajouter = ajouter
let retirer = retirer
let consulter p =
match !p with
| [] -> raise Vide
| x::t -> x
end;;
|
|