(loop for i from (- end 1) downto start do (rotatef (aref sequence i) (aref sequence (random (+ i 1))))) should be
(loop for i from start below end do (rotatef (aref sequence i) (aref sequence (+ i (random (- end i)))))) otherwise the element selected won't be bound by [start, end),
similar bug in the sequence typed version Cheers,