(* exemples de termes *) let t1 = (* 5+3*5 *) TAdd(TInt 5, TMul(TInt 3,TInt 5)) let t2 = (* fun x -> x*x *) TFun("x",TMul(TVar "x",TVar "x")) let t3 = (* let f = fun x -> x*x in f (5+3*5) *) TLet("f",t2,TApp(TVar "f",t1)) let t4 = (* let y = 33 in fun x -> x*y *) TLet("y",TInt 33,TFun("x", TMul(TVar "x",TVar "y"))) let t5 = (* let f = (let y = 33 in fun x -> x*y) in f (5+3*5) *) TLet("f",t4,TApp(TVar "f",t1)) let t6 = (* let x = 3 in let f = fun y -> y * x in let x = 6 in f x *) TLet("x",TInt 3,TLet("f",TFun("y",TMul(TVar "y",TVar "x")),TLet("x",TInt 6,TApp(TVar "f",TVar "x")))) (* tests *) let _ = eval empty_env t1 (* 20 *) let _ = eval empty_env t2 (* *) let _ = eval empty_env t3 (* 400 *) let _ = eval empty_env t4 (* *) let _ = eval empty_env t5 (* 660 *) let _ = eval empty_env t6 (* 18 *)