+(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's proposal
+--------------
+
+Ken Shan 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)))))))