- (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 expressive 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 expressive 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))