(DEFUN FIRST_EL(n lst) (COND (( < = n 0) NIL) ((NULL lst) NIL) (1 (CONS (CAR lst) (FIRST_EL (- n '1) (CDR LST)))) ) ) (DEFUN LAST_EL(n lst) (COND ((<= n 0) LST) ((NULL lst) NIL) (1 (LAST_EL (- n '1) (CDR LST))) ) ) (DEFUN SPLIT(lst) (SET 'fi (FIRST_EL (/ (LENGTH lst) 2) lst)) (SET 'li (LAST_EL (LENGTH fi) lst)) (LIST fi li) ) (DEFUN MERGE(lst1 lst2) (COND ((NULL lst1) lst2) ((NULL lst2) lst1) ((> (CAR lst1) (CAR lst2)) (CONS (CAR lst2) (MERGE lst1 (CDR lst2)))) (1 (CONS (CAR lst1) (MERGE (CDR lst1) lst2))) ) ) (DEFUN SORT(LST) (COND ( (eq (LENGTH (CAR (SPLIT LST))) 1) (MERGE (CAR (SPLIT LST)) (CAR(CDR (SPLIT LST))))) ( 1 (MERGE (SORT (CAR (SPLIT LST))) (SORT(CAR (CDR (SPLIT LST)))))) ) )