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:
+
+ let bar = fun x -> B in
+ M
+
+ as:
+
+ let bar x = B in
+ M
+
+ It also permits you to abbreviate:
+
+ let bar = fun x -> B;;
+
+ as:
+
+ let bar x = B;;
+
+ Similarly, Scheme permits you to abbreviate:
+
+ (define bar (lambda (x) B))
+
+ as:
+
+ (define (bar x) B)
+
+ and this is the form you'll most often see Scheme definitions written in.
+
+ However, conceptually you should think backwards through the abbreviations and equivalences we've just presented.
+
+ (define (bar x) B)
+
+ just means:
+
+ (define bar (lambda (x) B))
+
+ which just means:
+
+ (let* [(bar (lambda (x) B))] ... rest of the file or interactive session ...)
+
+ which just means:
+
+ (lambda (bar) ... rest of the file or interactive session ...) (lambda (x) B)
+
+ or in other words, interpret the rest of the file or interactive session with `bar` assigned the function `(lambda (x) B)`.
+
+
+10. Shadowing
+
+ You can override a binding with a more inner binding to the same variable. For instance the following expression in OCaml:
+
+ let x = 3 in
+ let x = 2 in
+ x
+
+ will evaluate to 2, not to 3. It's easy to be lulled into thinking this is the same as what happens when we say in C:
+
+ int x = 3;
+ x = 2;
+
+ <em>but it's not the same!</em> In the latter case we have mutation, in the former case we don't. You will learn to recognize the difference as we proceed.
+
+ The OCaml expression just means:
+
+ (fun x -> ((fun x -> x) 2) 3)
+
+ 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.
+