(defun set-array (&optional (list) (num) (array (make-array '(10) :initial-element nil)))
(if (not list)
array
(let ((key (truncate (mod (/ (car list) (expt 10 num)) 10))))
(setf (svref array key) (append (svref array key) (list (car list))))
(set-array (cdr list) num array))))
(defun array-to-list (&optional (array) (num 0))
(if (< num (length array))
(append (svref array num) (array-to-list array (1+ num)))))
(defun max-elements (&optional (list) (elm 0))
(if (not list)
elm
(max-elements (cdr list) (if (> elm (car list)) elm (car list)))))
(defun check-diginum (&optional (num) (digi 0))
(if (< 0 (truncate (mod (/ num (expt 10 digi)) 10)))
(check-diginum num (1+ digi))
(1+ digi)))
(defun radix-sort (list)
(dotimes (x (check-diginum (max-elements list)) list)
(setf bucket (set-array list x)
list (array-to-list bucket))))