(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
(define fill)
(define leave)
(define waddle
(lambda (l)
(cond
[(null? l) '()]
[(atom? (car l)) (let ()
(call-with-current-continuation
(lambda (rest)
(set! fill rest)
(leave (car l))))
(waddle (cdr l)))]
[else (let ()
(waddle (car l))
(waddle (cdr l)))])))
(define get-first
(lambda (l)
(call-with-current-continuation
(lambda (here)
(set! leave here)
(waddle l)
(leave '())))))
(define get-next
(lambda (x)
(call-with-current-continuation
(lambda (here-again)
(set! leave here-again)
(fill 'go)))))