Signed-off-by: Jim Pryor <profjim@jimpryor.net>
...
| Lambda(arg_var, t1) -> Closure (arg_var, t1, g)
| Apply(t1, t2) ->
...
| Lambda(arg_var, t1) -> Closure (arg_var, t1, g)
| Apply(t1, t2) ->
(* we don't handle cases where t1 doesn't evaluate to a function value *)
(* we don't handle cases where t1 doesn't evaluate to a function value *)
- in let Closure (arg_var, body, savedg) = eval t1 g
+ let Closure (arg_var, body, savedg) = eval t1 g
+ in let value2 = eval t2 g
(* evaluate body under savedg, except with arg_var bound to value2 *)
in let savedg' = (arg_var, value2) :: savedg
in eval body savedg';;
(* evaluate body under savedg, except with arg_var bound to value2 *)
in let savedg' = (arg_var, value2) :: savedg
in eval body savedg';;
...
| Lambda(arg_var, t1) -> Closure (arg_var, t1, g)
| Apply(t1, t2) ->
...
| Lambda(arg_var, t1) -> Closure (arg_var, t1, g)
| Apply(t1, t2) ->
(* we don't handle cases where t1 doesn't evaluate to a function value *)
(* we don't handle cases where t1 doesn't evaluate to a function value *)
- in let Closure (arg_var, body, savedg) = eval t1 g
+ let Closure (arg_var, body, savedg) = eval t1 g
+ in let value2 = eval t2 g
(* evaluate body under savedg, except with arg_var bound to Nonrecursive value2 *)
in let savedg' = (arg_var, Nonrecursive value2) :: savedg
in eval body savedg'
(* evaluate body under savedg, except with arg_var bound to Nonrecursive value2 *)
in let savedg' = (arg_var, Nonrecursive value2) :: savedg
in eval body savedg'