-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathterm2.ml
More file actions
30 lines (23 loc) · 1.12 KB
/
Copy pathterm2.ml
File metadata and controls
30 lines (23 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(** Le type [t] correspond à la représentation interne des termes.
* Le type [var] représente les variables, c'est à dire les objets que
* l'on peut instantier.
* Le type [obs_t] correspond à un terme superficiellement explicité. *)
type t = Fun_t of string * t list | Var_t of var
type var = string
type obs_t = Fun of string * t list | Var of var
type state = var -> t
let (current_state : state) = ref (fun x : var -> Var_t(x))
(** Modification d'une variable. *)
val bind : var -> t -> unit
let bind (x : var) (terme : t) = current_state := (fun y -> if(y = x) then t else (!current_state y))
(** [save ()] renvoie un descripteur de l'état actuel. *)
val save : unit -> state
let save () = !current_state;
(** [restore s] restaure les variables dans l'état décrit par [s]. *)
val restore : state -> unit
let restore (ancien_state : state) = current_state := ancien_state
(** Remise à zéro de l'état interne du module.
Garantit que les futurs usages seront comme
dans un module fraichement initialisé. *)
val reset : unit -> unit
let reset () = current_state := ref (fun x : var -> Var_t(x))