(define reverse (lambda (lst) (reverse-onto lst '()))) (define reverse-onto (lambda (lst tail) (if (null? lst) tail (reverse-onto (cdr lst) (cons (car lst) tail))))) (define reverse! (lambda (lst) (reverse-onto! lst '()))) (define reverse-onto! (lambda (lst tail) (if (null? lst) tail (let ((the-first-pair lst) (the-rest-of-lst (cdr lst))) (set-cdr! the-first-pair tail) (reverse-onto! the-rest-of-lst the-first-pair)))))