X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?a=blobdiff_plain;f=advanced_topics%2Fcalculator_improvements.mdwn;fp=advanced_topics%2Fcalculator_improvements.mdwn;h=cbf4c89cfffd331d93abf855f3a6e9385014c501;hb=3a2af9fce8aa8b45c0e5bd9774cff980dd5ed6f2;hp=4f24f877c52e21ab64439e2d39e6f53add7946fc;hpb=88f7b0444146d9379521cc31ad9ef87b909e0b3b;p=lambda.git 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'