Compare commits

...

2 commits

3 changed files with 10 additions and 2 deletions

View file

@ -3,7 +3,8 @@ module S = Lambda
(* The target calculus. *)
module T = Tail
exception NotValue (** <- Raised when trying to use a non-value term as such *)
exception NotValue of S.term
(** ^ Raised when trying to use a non-value term as such *)
let freshId =
(** Generates a fresh variable name string *)
@ -30,7 +31,7 @@ let rec cps_value (t: S.term) : T.value = match t with
| S.Var v -> T.VVar v
| S.Lit v -> T.VLit v
| S.BinOp (l, op, r) -> T.VBinOp (cps_value l, op, cps_value r)
| S.Let _ | S.Lam _ | S.App _ | S.Print _ | S.IfZero _ -> raise NotValue
| S.Let _ | S.Lam _ | S.App _ | S.Print _ | S.IfZero _ -> raise (NotValue t)
let cps_value_as_term (t: S.term) (cont: T.variable): T.term =
T.TailCall(T.vvar cont, [cps_value t])

1
src/tests/redef.exp Normal file
View file

@ -0,0 +1 @@
42

6
src/tests/redef.lambda Normal file
View file

@ -0,0 +1,6 @@
let increase = fun x -> x + 1 in
let increase = fun x ->
let lop = (increase x) in
lop + 1 in
print (increase 40)