exception Erreur of string;; let rec eval env = function | Var x -> begin try List.assoc x env with | Not_found -> raise (Erreur ("Variable " ^x^ " libre")) end | Mes (e, l) -> begin match eval env e with | Obj p as v -> let (x, a) = try List.assoc l p with Not_found -> raise (Erreur ("Message " ^l^ " not found ")) in eval ((x, v)::env) a | Int 1 -> raise (Erreur "Message à un entier") | _ -> assert false end | Mod (e, l, b) -> begin match eval env e with | Obj p as v -> Obj ((l, b) :: (List.filter (function m, _ -> l <> m) p)) | Int 1 -> raise (Erreur "Modification d'un entier") | _ -> assert false end | Int n -> Int n | Obj p -> Obj p ;; |
eval [] e;; |
- : term = Int 3 |