; 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
(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
; 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?