-The previous interpreter strategy is nice because it corresponds so closely to the
-reduction rules we give when specifying our lambda calculus. (Including
-specifying evaluation order, which redexes it's allowed to reduce, and
-so on.) But keeping track of free and bound variables, computing fresh
-variables when needed, that's all a pain.
-
-Here's a better strategy. Instead of keeping all of the information
-about which variables have been bound or are still free implicitly
-inside of the terms, we'll keep a separate scorecard, which we will call an "environment". This is a
-familiar strategy for philosophers of language and for linguists,
-since it amounts to evaluating terms relative to an assignment
-function. The difference between the substitute-and-repeat approach
-above, and this approach, is one huge step towards monads.
-
-The skeleton code for this is at the [[same link as before|/code/untyped_evaluator.ml]].
-This part of the exercise is the "VB" part of that code.
-
-You'll see that in the `eval` function, a new kind of value `Closure (ident) (term) (env)`
-is used. What's that about?
-
-The `Closure`s are for handling the binding of terms that have locally free variables in them. Let's
+This strategy has to introduce a new kind of structure, called a `Closure`, to handle
+binding to terms that have locally free variables in them. Let's