;---- file 3-reverse-k-trace.ss ---- ;---- Same as the previous program, but with tracing (trace-define reverse*-k (lambda (L k) (if (null? L) (apply-continuation k '()) (reverse*-k (cdr L) (make-rev1 k L))))) (trace-define append-k (lambda (a b k) (if (null? a) (apply-continuation k b) (append-k (cdr a) b (make-append-cont k a))))) (trace-define make-rev1 (lambda (k L) (trace-lambda rev1-k (reversed-cdr) (if (pair? (car L)) (reverse*-k (car L) (make-rev2 reversed-cdr k)) (append-k reversed-cdr (list (car L)) k))))) (trace-define make-rev2 (lambda (reversed-cdr k) (trace-lambda rev2-k (reversed-car) (append-k reversed-cdr (list reversed-car) k)))) (trace-define make-init-k (lambda () (trace-lambda init-k (v) (display "answer: ") (display v) (newline)))) (trace-define make-append-cont (lambda (k a) (trace-lambda append-k (appended-cdr) (apply-continuation k (cons (car a) appended-cdr))))) (trace-define apply-continuation (lambda (k v) (k v))) (trace-define testk (lambda () (reverse*-k '(1 ((2 3) () 4)) (make-init-k))))