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