tweak calc improvements
[lambda.git] / advanced_topics / calculator_improvements.mdwn
index b36f628..541e695 100644 (file)
@@ -465,12 +465,12 @@ Now we need to formulate the clauses for evaluating the new forms `Newref (...)`
                (* we don't handle cases where t1 doesn't evaluate to a Mutcell *)
                let (Mutcell index1, s') = eval t1 g s
                (* note that s' may be different from s, if t1 itself contained any mutation operations *)
-               in let (new_value, s'') = eval t2 g s'
-               (* now we create a list which is just like s'' except it has new_value in index1 *)
+               in let (value2, s'') = eval t2 g s'
+               (* now we create a list which is just like s'' except it has value2 in index1 *)
                in let rec replace_nth lst m =
                        match lst with
                        | [] -> failwith "list too short"
-                       | x::xs when m = 0 -> new_value :: xs
+                       | x::xs when m = 0 -> value2 :: xs
                        | x::xs -> x :: replace_nth xs (m - 1)
                in let s''' = replace_nth s'' index1
                (* we'll arbitrarily return Int 42 as the expressed_value of a Setref operation *)
@@ -538,12 +538,12 @@ Finally, here are the changed or added clauses to the evaluation function:
         (* we don't handle cases where t1 doesn't evaluate to a Pair *)
         let (Pair (index1, index2), s') = eval t1 g s
         (* note that s' may be different from s, if t1 itself contained any mutation operations *)
-        in let (new_value, s'') = eval t2 g s'
-        (* now we create a list which is just like s'' except it has new_value in index1 *)
+        in let (value2, s'') = eval t2 g s'
+        (* now we create a list which is just like s'' except it has value2 in index1 *)
         in let rec replace_nth lst m =
             match lst with
             | [] -> failwith "list too short"
-            | x::xs when m = 0 -> new_value :: xs
+            | x::xs when m = 0 -> value2 :: xs
             | x::xs -> x :: replace_nth xs (m - 1)
         in let s''' = replace_nth s'' index1
         in (Int 42, s''')
@@ -585,7 +585,7 @@ In the present implementation, we separate the roles of the `bound_value` and `e
         
        type store = expressed_value list;;
 
-Our evaluation function still interacts with a `store` argument in much the same way it did with explicit-style mutation. The clause for `Variable ...` works differently, because all `expressed_value`s now need to be retrieved from the `store`:
+Our evaluation function still interacts with a `store` argument in much the same way it did with explicit-style mutation. The clause for `Variable (...)` works differently, because all `expressed_value`s now need to be retrieved from the `store`:
         
        let rec eval (t : term) (g : assignment) (s : store) = match t with
        ...
@@ -655,7 +655,7 @@ Finally, here is the clause for `Change (...)`, which takes over the role earlie
                in eval t3 g s''
        ;;
 
-Note that because the `savedg` component of a `Closure` keeps track of which `index`es in the store free variables were bound to, the values at those `index`es can later be changed, and later applications of the `Closure` will use the changed values.
+Note that because the `savedg` component of a `Closure` keeps track of which `index`es in the store---rather than which values---free variables were bound to, the values at those `index`es can later be changed, and later applications of the `Closure` will use the changed values.
 
 The complete code is available [here](/code/calculator/calc6.ml).