;starting-code (define read-flatten-print (lambda () (display "enter slist to flatten: ") (let ([slist (read)]) (unless (eq? slist 'exit) (flatten-cps slist (lambda (val) (pretty-print val) (read-flatten-print))))))) (define flatten-cps (lambda (ls k) (if (null? ls) (k ls) (flatten-cps (cdr ls) (lambda (v) (if (list? (car ls)) (flatten-cps (car ls) (lambda (u) (append-cps u v k))) (k (cons (car ls) v)))))))) (define append-cps (lambda (l1 l2 k) (if (null? l1) (k l2) (append-cps (cdr l1) l2 (lambda (appended-cdr) (k (cons (car l1) appended-cdr)))))))