author Jim Pryor Tue, 21 Dec 2010 03:24:02 +0000 (22:24 -0500) committer Jim Pryor Tue, 21 Dec 2010 03:24:02 +0000 (22:24 -0500)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>

index 2063ef0..0d4eb1d 100644 (file)
@@ -330,13 +330,14 @@ Next, try to figure out what this function does:
[(null? l) (k 'notfound)]
[(eq? (car l) a) (cdr l)]
[(atom? (car l)) (cons (car l) (aux (cdr l) k))]
[(null? l) (k 'notfound)]
[(eq? (car l) a) (cdr l)]
[(atom? (car l)) (cons (car l) (aux (cdr l) k))]
-                             ; what happens when (car l) exists but isn't an atom?
-                             [else (let ([car2 (let/cc k2 ; now what will happen when k2 is called?
-                                                 (aux (car l) k2))])
-                                     (cond
-                                       ; when will the following condition be met? what happens then?
-                                       [(eq? car2 'notfound) (cons (car l) (aux (cdr l) k))]
-                                       [else (cons car2 (cdr l))]))]))]
+                             [else
+                              ; what happens when (car l) exists but isn't an atom?
+                              (let ([car2 (let/cc k2 ; now what will happen when k2 is called?
+                                            (aux (car l) k2))])
+                                (cond
+                                  ; when will the following condition be met? what happens then?
+                                  [(eq? car2 'notfound) (cons (car l) (aux (cdr l) k))]
+                                  [else (cons car2 (cdr l))]))]))]
[lst2 (let/cc k1 ; now what will happen when k1 is called?
(aux lst k1))])
(cond
[lst2 (let/cc k1 ; now what will happen when k1 is called?
(aux lst k1))])
(cond
@@ -344,7 +345,6 @@ Next, try to figure out what this function does:
[(eq? lst2 'notfound) lst]
[else lst2]))))

[(eq? lst2 'notfound) lst]
[else lst2]))))

-
Here is [the answer](/hints/cps_hint_3), but try to figure it out for yourself.

Here is the hardest example. Try to figure out what this function does:
Here is [the answer](/hints/cps_hint_3), but try to figure it out for yourself.

Here is the hardest example. Try to figure out what this function does:
index 845f556..afc5bee 100644 (file)
@@ -12,16 +12,17 @@ This function is developed in *The Seasoned Schemer* pp. 84-89. It accepts an at
[(null? l) (k 'notfound)]
[(eq? (car l) a) (cdr l)]
[(atom? (car l)) (cons (car l) (aux (cdr l) k))]
[(null? l) (k 'notfound)]
[(eq? (car l) a) (cdr l)]
[(atom? (car l)) (cons (car l) (aux (cdr l) k))]
-                             ; when (car l) exists but isn't an atom, we try to remove a from (car l)
-                             ; if we succeed we prepend the result to (cdr l) and stop
-                             [else (let ([car2 (let/cc k2
-                                                 ; calling k2 with val will bind car2 to val and continue with the (cond ...) block below
-                                                 (aux (car l) k2))])
-                                     (cond
-                                       ; if a wasn't found in (car l) then prepend (car l) to the result of removing a from (cdr l)
-                                       [(eq? car2 'notfound) (cons (car l) (aux (cdr l) k))]
-                                       ; else a was found in (car l)
-                                       [else (cons car2 (cdr l))]))]))]
+                             [else
+                              ; when (car l) exists but isn't an atom, we try to remove a from (car l)
+                              ; if we succeed we prepend the result to (cdr l) and stop
+                              (let ([car2 (let/cc k2
+                                            ; calling k2 with val will bind car2 to val and continue with the (cond ...) block below
+                                            (aux (car l) k2))])
+                                (cond
+                                  ; if a wasn't found in (car l) then prepend (car l) to the result of removing a from (cdr l)
+                                  [(eq? car2 'notfound) (cons (car l) (aux (cdr l) k))]
+                                  ; else a was found in (car l)
+                                  [else (cons car2 (cdr l))]))]))]
[lst2 (let/cc k1
; calling k1 with val will bind lst2 to val and continue with the (cond ...) block below
(aux lst k1))])
[lst2 (let/cc k1
; calling k1 with val will bind lst2 to val and continue with the (cond ...) block below
(aux lst k1))])