単純選択ソート習作

(defun do-simple-select (&optional (list) (num nil))
  (let ((tmp (car list)))
    (cond ((not num) (do-simple-select (cdr list) tmp))
	  ((not tmp) (cons nil num))
	  ((not (cdr list)) (if (> num tmp)
				(cons (list num) tmp)
				(cons (list tmp) num)))
	  (t (progn
	       (if (> num tmp)
		   (setf tt tmp
			 tmp num
			 num tt))
	       (setf t1 (do-simple-select (cdr list) num)
		     t-num (cdr t1)
		     t-lst (car t1))
	       (cons (cons tmp t-lst) t-num))))))

(defun simple-select-sort (list)
  (let ((ret-list))
    (dotimes (x (length list) ret-list)
      (setf my-list (do-simple-select list)
	    ret-list (append ret-list (list (cdr my-list)))
	    list (car my-list)))))
; 結果
; * (simple-select-sort '(3 1 2 5 4 6))
; 
; (1 2 3 4 5 6)
; * 

 condの場合分けがいまいちかっこ悪い。もっといい書き方があるのかもしれないけど、思い付かない。