ありがとうございます。ご指摘の通りwhileを使うべきだったのに
whenを使ってしまいました。
こう書き直したら動きました。
(defun insertion-sort (a)
(do ((j 1 (+ j 1)))
((= j (length a)) a)
(let ((key (nth j a))
(i (- j 1)))
(loop
while (and (>= i 0)
(> (nth i a) key))
do
(setf (nth (+ i 1) a) (nth i a))
(setf i (- i 1))
)
(setf (nth (+ i 1) a) key)
)))