(defun shuffle-vector (v)
"Return copy of vector with elements shuffled like a deck of cards."
(loop
with result = (copy-seq v)
finally (return result)
for i from (length v) downto 1
as j = (random i)
do (rotatef (svref result j) (svref result (1- i)))))
That was fun.