; TREE TRAVERSAL STUFF: ; Function that initiates a tree traveral. ; When done, handle an 'end of traversal' value to the controller. (define (traverse-start tree controller-cont) (let ((cont (traverse tree controller-cont))) (cont (cons #f 'no-continuation)) ; end of traversal value, passed back to controller. )) ; Traverse tree, and send every node encountered to controller-cont. ; Returns a controller continuation. (define (traverse tree controller-cont) (cond ((empty-tree? tree) controller-cont) ((inner-node? tree) (let ((new-controller-cont (traverse (left-tree tree) controller-cont))) (let ((new-controller-cont (handle-node (root tree) new-controller-cont))) (let ((new-controller-cont (traverse (right-tree tree) new-controller-cont))) new-controller-cont)))) ((leaf? tree) (handle-node (root tree) controller-cont)) (else (error "Should not happen"))) ) ; Function that handles nodes (internal as well as leafs). ; Send the node value n, together with a continuation, to controller-cont. ; In turn, receive a new controller continuation, which is returned by handle-node. (define (handle-node n controller-cont) (call-with-current-continuation (lambda (here) (controller-cont (cons n here)))))