+ (define damn (lambda () 'id))
+
+We evaluate:
+
+ (reset (cons (cons 'the 'man)
+ (cons 'read
+ (cons 'the
+ (cons (damn)
+ 'book)))))
+
+Remember, the reset isn't actually *doing* anything. It's not a function that's taking the other material as an argument. It's instead a scope-marker. Here it's not even needed (and in fact in the interactive interpreter, it wouldn't even be needed when we invoke continuations, because of the default position it takes). But we're inserting it to be explicit and uniform.
+
+Evaluating that gives us:
+
+ ((the . man) . (read . (the . (id . book))))
+
+
+Now to pair that with an affective side-issue content, we'd instead define `damn` as:
+
+ (require racket/control) ; this tells Scheme to let us use shift and reset
+ (define damn (lambda () (shift k (cons (cons 'side-effect 'bad) (k 'id)))))
+
+And voila:
+
+(reset (cons (cons 'the 'man)
+ (cons 'read
+ (cons 'the
+ (cons (damn)
+ 'book)))))
+
+evaluates to:
+
+ ((side-effect bad) ((the . man) . (read . (the . (id . book)))))
+
+So that's the straightforward way of repairing the strategy we used in class, without using `print`. We also have to switch to using delimited continuations.
+
+
+Ken Shan, however, pointed out a lovely way to get to the same end-point still using only undelimited continuations (`call/cc`).
+
+(let ((pragma
+ ; An ordered pair whose first component is the assertion
+ ; operator, a unary function, and whose second component
+ ; is the meaning of "damn", a thunk.
+ (call/cc (lambda (k)
+ (cons (lambda (p) p)
+ (lambda () (k (cons (lambda (p) (cons (cons 'side-effect 'bad) p))
+ (lambda () 'id)))))))))
+ (let ((assert (car pragma)) ; this binds assert to the first element of the pair pragma
+ (damn (cdr pragma))) ; this binds damn to the second element of the pair pragma
+ (assert (cons (cons 'the 'student) (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.