X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week1.mdwn;h=1bc2309e1e9c79eea7118b9f6e72045a90b3317d;hp=0207f0ceae92b3e0eafc4513fa279d8007de294e;hb=46354da45e90d803a324be20b6613a8700349a1c;hpb=6ca041c08f7d5eccc1550af16de405c66fb23139
diff --git a/week1.mdwn b/week1.mdwn
index 0207f0ce..1bc2309e 100644
--- a/week1.mdwn
+++ b/week1.mdwn
@@ -59,7 +59,6 @@ We'll tend to write (λa M)
as just `(\a M)`, so we don't hav
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.
-
-true and true = true
-true and true = true
-true and * = *
-true and false = false
-* and true = *
-* and * = *
-* and false = *
-false and true = false
-false and * = false
-false and false = false
-
+ true and true = true
+ true and true = true
+ true and * = *
+ true and false = false
+ * and true = *
+ * and * = *
+ * and false = *
+ false and true = false
+ false and * = false
+ false and false = false
And then we'd notice that `* and false` has a different intepretation than `false and *`. (The same phenomenon is already present with the material conditional in bivalent logics; but seeing that a non-symmetric semantics for `and` is available even for functional languages is instructive.)
@@ -606,7 +601,6 @@ Here's how it looks to say the same thing in various of these languages.
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:
@@ -677,9 +671,8 @@ Here's how it looks to say the same thing in various of these languages.
and there's no more mutation going on there than there is in:
-
- ∀x. (F x or ∀x (not (F x)))
-
+ ∀x. (F x or ∀x (not (F x)))
+
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.