;------------ file 2-cps.ss ------------------ ;------------ a cps version of reverse. ----- (define apply-k (lambda (k v) (k v))) (trace-define reverse*-cps (lambda (L k) (if (null? L) (apply-k k '()) (reverse*-cps (cdr L) (trace-lambda cdr-k (reversed-cdr) (if (pair? (car L)) (reverse*-cps (car L) (trace-lambda car-k (reversed-car) (append-cps reversed-cdr (list reversed-car) k))) (append-cps reversed-cdr (list (car L)) k))))))) (trace-define append-cps (lambda (a b k) (if (null? a) (apply-k k b) (append-cps (cdr a) b (trace-lambda append-k (appended-cdr) (apply-k k (cons (car a) appended-cdr))))))) (trace-define init-k (lambda (v) (display "answer: ") (display v) (newline))) ; (trace reverse*-cps append-cps init-k apply-k)