From: Jim Pryor Date: Thu, 25 Nov 2010 16:37:43 +0000 (-0500) Subject: tweak calc improvements X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=commitdiff_plain;h=3a2af9fce8aa8b45c0e5bd9774cff980dd5ed6f2 tweak calc improvements Signed-off-by: Jim Pryor --- diff --git a/advanced_topics/calculator_improvements.mdwn b/advanced_topics/calculator_improvements.mdwn index 4f24f877..cbf4c89c 100644 --- a/advanced_topics/calculator_improvements.mdwn +++ b/advanced_topics/calculator_improvements.mdwn @@ -145,9 +145,9 @@ Now our evaluation function needs two further clauses to interpret the two new e ... | Lambda(arg_var, t1) -> Closure (arg_var, t1, g) | Apply(t1, t2) -> - let value2 = eval t2 g (* 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';; @@ -276,9 +276,9 @@ Since we're not permitting ourselves OCaml's ability to recursively define cycli ... | Lambda(arg_var, t1) -> Closure (arg_var, t1, g) | Apply(t1, t2) -> - let value2 = eval t2 g (* 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'