Some authors reserve the term "term" for just variables and abstracts. We'll probably just say "term" and "expression" indiscriminately for expressions of any of these three forms.
-<div>
Examples of expressions:
x
(\x (\y x))
(x (\x x))
((\x (x x)) (\x (x x)))
-</div>
The lambda calculus has an associated proof theory. For now, we can regard the
proof theory as having just one rule, called the rule of **beta-reduction** or
It's easy to be lulled into thinking this is a kind of imperative construction. *But it's not!* It's really just a shorthand for the compound "let"-expressions we've already been looking at, taking the maximum syntactically permissible scope. (Compare the "dot" convention in the lambda calculus, discussed above.)
-
9. Some shorthand
OCaml permits you to abbreviate:
and there's no more mutation going on there than there is in:
+<!--
+
<pre>
<code>∀x. (F x or ∀x (not (F x)))</code>
</pre>
When a previously-bound variable is rebound in the way we see here, that's called **shadowing**: the outer binding is shadowed during the scope of the inner binding.
+-->
Some more comparisons between Scheme and OCaml
----------------------------------------------