Files

21 lines
754 B
Common Lisp

(define (null? l) (eq? l '()))
(define (merge-lists l1 l2)
(cond ((null? l1) l2)
((null? l2) l1)
((< (car l1) (car l2)) (cons (car l1) (merge-lists (cdr l1) l2)))
(#t (cons (car l2) (merge-lists l1 (cdr l2))))))
(define (split-half l l1 l2)
(cond ((null? l) (cons l1 l2))
((null? (cdr l)) (split-half (cdr l) (cons (car l) l1) l2))
(#t (split-half (cdr (cdr l))
(cons (car l) l1)
(cons (car (cdr l)) l2)))))
(define (merge-sort lst)
(cond ((null? lst) '())
((null? (cdr lst)) lst)
(#t (let ((lsts (split-half lst '() '())))
(merge-lists (merge-sort (car lsts))
(merge-sort (cdr lsts)))))))