damn tweaks7
[lambda.git] / damn.mdwn
index 32a0a3b..432ab63 100644 (file)
--- a/damn.mdwn
+++ b/damn.mdwn
@@ -19,7 +19,8 @@ shouldn't be burdened with helping compute affective content.
 
 
 
-What we did in Monday's seminar:
+What we did in Monday's seminar
+-------------------------------
 
 We start with a simulation of semantic composition:
 
@@ -39,6 +40,7 @@ If you try it yourself, you may see instead:
 This is shorthand for the same thing. Just trust me on that.
 
 What's going on here?
+=====================
 
 `(cons M N)` is a request to build an ordered pair out of the values M and N.
 Scheme displays that pair as `'(M . N)` You can't write `(M . N)` yourself and expect Scheme to understand that you're talking about this pair. If you tried, to, Scheme would think you're trying to apply the function M to some arguments, which you're not, and also
@@ -56,7 +58,7 @@ There is an underlying reason why parentheses are used both when displaying the
 
 Now what about the elements of our ordered pairs. Why do we say `(cons 'the 'man)`. Why are those single quotes there? Well, if you just said `(cons the man)`, Scheme would understand `the` and `man` to be variables, and it would complain that you hadn't bound these variables to any values. We don't want to build an ordered pair out of the values possessed by variables `the` and `man`. Instead, we want to just make up some primitive value THE to stand for the meaning of an object-language determiner, and some primitive value MAN to stand for the meaning of an object-language noun phrase. The notation `'the` is Scheme's way of designating a primitive atomic value. Note there is no closing single quote, only a prefixed one. Scheme calls these primitive atomic values "symbols." That term is a bit misleading, because the symbol `'the` is not the same as the variable `the`. Neither is it the same as what's called the string `"the"`. The latter is a structured value, composed out of three character values. The symbol `'the`, on the other hand, is an atomic value. It has no parts. (The notation the programmer uses to designate this atomic value has four characters, but the value designated itself has no parts.) If you think this is all somewhat confusing, you're right. It gets easier with practice.
 
-`'the` can also be written `(quote the)`. This is even more confusing, because here the `the` is not interpreted as a variable. (Try `(let* ((the 3)) (quote the))`.) If you come across this, just read `(quote the)` as a verbose (and perhaps misleading) way of writing `'the`, not as the application of any function to any value.
+`'the` can also be written `(quote the)`. This is even more confusing, because here the `the` is not interpreted as a variable. (Try `(let* ((the 3)) (quote the))`.) If you come across `(quote the)`, just read it as a verbose (and perhaps misleading) way of writing `'the`, not as the application of any function to any value.
 
 Okay, so what we've done is just create a bunch of new atomic values `'the`, `'man`, and so on. Scheme doesn't know how to do much with these. It knows for instance that `'the` is the same value as `'the` and a different value than `'man`. But it doesn't know much more than that. That's all we need or want here.
 
@@ -73,7 +75,9 @@ evaluates to the nested structure of pairs that Scheme displays as:
 
        '((the . man) . (read . (the . book)))
 
-and that we can think of as the tree:
+---or as an equivalent shorthand. And although there aren't `'`s prefixed to each of the elements of this nested structure, those elements are still the `'the`, `'man` and so on primitive atomic values that we specified. Not the values (if any) possessed by some variables `the`, `man`, and so on.
+
+We can think of this nested structure of pairs as the tree:
 
                                 /----------------\
                                /                  \
@@ -97,6 +101,7 @@ Okay, let's get back to "damn."
 We start by defining `damn` as a "thunk" that when applied to zero arguments returns a trivial adjectival meaning, which we'll designate with the primitive symbol `'id`.
 
 What's a "thunk"?
+=================
 
 Remember, in Scheme you can have functions that take one value, and also functions that take two values, and also functions that take zero values. The last ones are called "thunks." The thunk is not identical to the value it returns. For instance:
 
@@ -210,7 +215,7 @@ So the demonstration we tried in class was pedagogically flawed. It didn't prope
 
 So a better demonstration would do without any device like `print` that already incorporates continuations implicitly. Any continuation-manipulation should be fully explicit.
 
-Instead of representing the side-issue affective contribution by printing "bad", let's instead try to build a pair of side-effect contributions and main-issue assertion. Then what we want would be something like:
+Instead of representing the side-issue affective contribution by printing "bad", let's instead try to build a pair of side-effect contributions and at-issue assertion. Then what we want would be something like:
 
        ((side-effect . bad) . ((the . man) . (read . (the . (id . book)))))
 
@@ -232,9 +237,9 @@ It's not immediately clear how to do it with "undelimited" continuations, of the
        (define damn (lambda () (call/cc (lambda (k) (cons (cons 'side-effect 'bad) (k 'id))))))
 
 
-The idea here is we capture the continuation that the thunk `(damn)` has when it gets evaluated. This continuation is bound to the variable `k`. We supply `'id` as an argument to that continuation. When the main-issues tree is all built, then we return a pair `((side-effect bad) MAIN-ISSUE-TREE)`.
+The idea here is we capture the continuation that the thunk `(damn)` has when it gets evaluated. This continuation is bound to the variable `k`. We supply `'id` as an argument to that continuation. When the main, at-issue tree is all built, then we return a pair `((side-effect bad) AT-ISSUE-TREE)`.
 
-However, this doesn't work. The reason is that an undelimited continuation represents the future of the evaluation of `(damn)` *until the end of the computation*. So when `'id` is supplied to `k`, we go back to building the main-issue tree until we're finished *and that's the end of the computation*. We never get to go back and evaluate the context `(cons (cons 'side-effect 'bad) ...)`.
+However, this doesn't work. The reason is that an undelimited continuation represents the future of the evaluation of `(damn)` *until the end of the computation*. So when `'id` is supplied to `k`, we go back to building the at-issue tree until we're finished *and that's the end of the computation*. We never get to go back and evaluate the context `(cons (cons 'side-effect 'bad) ...)`.
 
 The straightforward way to fix this is to use, not undelimited continuations, but instead a more powerful apparatus called "delimited continuations." These too will be explained in due course, don't expect to understand all this now.
 
@@ -354,7 +359,7 @@ We won't do much to explain this. We'll just leave it for you to chew on.
        ; '("main content" i (like (the id boy)))
 
 
-; If we use damn1, we've added in the affective side-effect:
+; If we use damn1, we've added in the affective side effect:
 
        (list "main content" 'i (list 'like (list 'the (damn1) 'boy)))
        ; '("main content" i (like (the (("side effect" bad) . id) boy)))
@@ -386,7 +391,7 @@ We won't do much to explain this. We'll just leave it for you to chew on.
 
 
 ; Instead of using reset/shift you could use an element like "print" in
-; building the side-effect, as we did in class. Here you wouldn't require an
+; building the side effect, as we did in class. Here you wouldn't require an
 ; explicit continuation, but as Chris said, that's because "print" already
 ; represents an implicit continuation.