towards monads: tweak error message
[lambda.git] / damn.mdwn
index 5686d4d..ad68775 100644 (file)
--- a/damn.mdwn
+++ b/damn.mdwn
@@ -1,3 +1,20 @@
+1.     Sentences have truth conditions.
+
+2.     If "John read the book" is true, then it follows that:
+       John read something,  
+       Someone read the book,  
+       John did something to the book,  
+       etc.
+
+3. If "John read the damn book",
+   all the same entailments follow.
+   To a first approximation, "damn" does not affect at-issue truth
+   conditions.  
+
+4. "Damn" does contribute information about the attitude of the speaker
+   towards some aspect of the situation described by the sentence.
+
+
 Expressives such as "damn" have side effects that don't affect the
 at-issue value of the sentence in which they occur.  What this claim
 says is unpacked at some length here: <http://tinyurl.com/cbarker/salt/interaction/salt.pdf>.
@@ -253,7 +270,7 @@ The idea here is we capture the continuation that `(damn)` has when it gets eval
 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 application of `(cons (cons 'side-effect 'bad) <>)` to anything.
 
 
-With undelimited continuations
+With delimited continuations
 ------------------------------
 
 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.
@@ -299,7 +316,7 @@ Now to pair that with an affective side-issue content, we'd instead define `damn
 
        (define damn (lambda () (shift k (cons (cons 'side-effect 'bad) (k 'id)))))
 
-And voila:
+And voil&agrave;!
 
        (reset (cons (cons 'the 'man) 
                  (cons 'read
@@ -331,92 +348,5 @@ Ken Shan pointed out a lovely way to get to the same end-point still using only
                        (damn   (cdr pragma))) ; this binds damn to the second element of the pair pragma
                (assert (cons (cons 'the 'man) (cons 'read (cons 'the (cons (damn) 'book)))))))
 
-We won't do much to explain this. We'll just leave it for you to chew on.
-
-
-
-
-       #lang racket
-       ;(define damn (lambda () 'id))
-       (define damn (lambda () (call/cc (lambda (k) 
-                                                                         ; (k 'id)
-                                                                          (print "Something's bad")
-                                                                          (k 'id)
-                                                                          ))))
-
-       (list (list 'the (list (damn) 'man))
-                 (list 'read 
-                               (list 'the (list (damn) 'book))))
-
-
-
-
-
-       #lang racket
-       (require racket/control)
-
-       (define damn0 (lambda ()
-                                       'id))
-
-       (define damn1 (lambda ()
-                                       (cons '("side effect" bad)
-                                                 'id)))
-
-       (define damn2 (lambda () (shift k
-                                                                       (cons '("side effect" bad) 
-                                                                                 (list (k 'id))))))
-
-       (define damn3 (lambda () (shift k
-                                                                       (list (k 'id)
-                                                                                 '("side effect" bad)))))
-
-
-; Now if we use damn0, our compositional semantics will work OK but
-; we don't yet have any affective contribution:
-
-       (list "main content" 'i (list 'like (list 'the (damn0) 'boy)))
-       ; '("main content" i (like (the id boy)))
-
-
-; 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)))
-
-; However, the context (list 'the <> 'boy) is now being asked to operate
-; on an element (("side effect" bad) . id), and it may complain it doesn't
-; know what that is. It knows how to use 'id to get (list 'the 'id 'boy),
-; and how to use 'bad to get (list 'the 'bad 'boy), but we're supposed to
-; have something different here.
-
-; To get what we want we need to use (delimited) continuations:
-       (reset (list "main content" 'i (list 'like (list 'the (damn2) 'boy))))
-       ; '(("side effect" bad) ("main content" i (like (the id boy))))
-
-; or to get the side effect at the end:
-
-       (reset (list "main content" 'i (list 'like (list 'the (damn3) 'boy))))
-       ; '(("main content" i (like (the id boy))) ("side effect" bad))
-
-; If you're working in the interactive interpreter, the outermost "reset" here
-; is already in its default position, so it doesn't need to be explicitly
-; specified:
-
-       (list "main content" 'i (list 'like (list 'the (damn2) 'boy)))
-       ; '(("side effect" bad) ("main content" i (like (the id boy))))
-
-; However, if you're executing this as a file, you would need to include explicit resets.
-
-
-
-; 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
-; explicit continuation, but as Chris said, that's because "print" already
-; represents an implicit continuation.
-
-       (define damn4 (lambda () (begin (print "bad") 'id)))
-       (list "main content" 'i (list 'like (list 'the (damn4) 'boy)))
-       ; "bad"'("main content" i (like (the id boy)))
-;
-
+We won't do much to explain this. We'll just leave it for you to digest, perhaps later in the course. When you succeed in doing so, you will be as delighted by it as we are.