cps: add some begins
[lambda.git] / cps_and_continuation_operators.mdwn
index aa2900c..f619fc0 100644 (file)
@@ -357,10 +357,10 @@ Here is the hardest example. Try to figure out what this function does:
                             ; is this the only case where walk returns a non-atom?
                             [(null? l) '()]
                             [(atom? (car l)) (begin
-                                               (let/cc k2
+                                               (let/cc k2 (begin
                                                  (set! resume k2) ; now what will happen when resume is called?
                                                  ; when the next line is executed, what will yield be bound to?
-                                                 (yield (car l)))
+                                                 (yield (car l))))
                                                ; when will the next line be executed?
                                                (walk (cdr l)))]
                             [else (begin
@@ -368,10 +368,10 @@ Here is the hardest example. Try to figure out what this function does:
                                     (walk (car l))
                                     (walk (cdr l)))]))]
                   [next (lambda () ; next is a thunk
-                          (let/cc k3
+                          (let/cc k3 (begin
                             (set! yield k3) ; now what will happen when yield is called?
                             ; when the next line is executed, what will resume be bound to?
-                            (resume 'blah)))]
+                            (resume 'blah))))]
                   [check (lambda (prev)
                            (let ([n (next)])
                              (cond
@@ -380,11 +380,11 @@ Here is the hardest example. Try to figure out what this function does:
                                ; when will n fail to be an atom?
                                [else #f])))])
            (lambda (lst)
-             (let ([fst (let/cc k1
+             (let ([fst (let/cc k1 (begin
                           (set! yield k1) ; now what will happen when yield is called?
                           (walk lst)
                           ; when will the next line be executed?
-                          (yield '()))])
+                          (yield '())))])
                (cond
                  [(atom? fst) (check fst)]
                  ; when will fst fail to be an atom?
@@ -500,7 +500,7 @@ You use these like so:
 There are also `reset` and `shift` and `abort` operations in the Continuation monad in our OCaml [[monad library]]. You can check the code for details.
 
 
-As we said, there are many varieties of delimited continuations. Another common pair is `prompt` and `control`. There's no difference in meaning between `prompt` and `reset`; it's just that people tend to say `reset` when talking about `shift` and `prompt` when talking about `control`. `control` acts subtly differently from `shift`. In the uses you're likely to make as you're just learning about continuations, you won't see any difference. If you'll do more research in this vicinity, you'll soon enough learn about the differences.
+As we said, there are many varieties of delimited continuations. Another common pair is `prompt` and `control`. There's no difference in meaning between `prompt` and `reset`; it's just that people tend to say `reset` when talking about `shift`, and `prompt` when talking about `control`. `control` acts subtly differently from `shift`. In the uses you're likely to make as you're just learning about continuations, you won't see any difference. If you'll do more research in this vicinity, you'll soon enough learn about the differences.
 
 (You can start by reading [the Racket docs](http://docs.racket-lang.org/reference/cont.html?q=shift&q=do#%28part._.Classical_.Control_.Operators%29).)