(define mergesort (lambda (lst) (cond ((null? lst) '()) ; first base case ((null? (cdr lst)) lst) ; second base case (else (merge (mergesort (one-part lst)) (mergesort (the-other-part lst))))))) (define merge (lambda (lst1 lst2) (cond ((null? lst1) lst2) ((null? lst2) lst1) ((< (car lst1) (car lst2)) (cons (car lst1) (merge (cdr lst1) lst2))) ((< (car lst2) (car lst1)) (cons (car lst2) (merge lst1 (cdr lst2)))) (else (cons (car lst1) (merge (cdr lst1) (cdr lst2))))))) (define odd-part (lambda (lst) (if (null? lst) '() (cons (car lst) (even-part (cdr lst)))))) (define even-part (lambda (lst) (if (null? lst) '() (odd-part (cdr lst))))) (define one-part odd-part) (define the-other-part even-part) (mergesort '(6 2 3 8 5 4 1 7)) ⇒ (1 2 3 4 5 6 7 8)