exception VarUndef of string

let rec eval_expr env = function 
    Cst x -> x
  | Var x -> (try List.assoc x env
	      with Not_found -> raise(VarUndef x))
  | Sum(e1,e2) -> (eval_expr env e1) + (eval_expr env e2)
  | Diff(e1,e2) -> (eval_expr env e1) - (eval_expr env e2)
  | Prod(e1,e2) -> (eval_expr env e1) * (eval_expr env e2)
  | Quot(e1,e2) -> (eval_expr env e1) / (eval_expr env e2)
  | Letin(x,e1,e2) -> let t = eval_expr env e1 in eval_expr ((x,t)::env) e2