mirror of
https://github.com/zoriya/HAL.git
synced 2026-06-10 08:29:25 +00:00
21 lines
754 B
Common Lisp
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))))))) |