Давайте сначала определим функцию, которая обновляет случайный индекс в векторе новым значением. Обратите внимание, что исходный вектор не изменяется, вместо этого возвращается новый вектор (с обновленным значением):
(defn f [xs]
(let [r (java.util.Random.)
i (.nextInt r (count xs))
b (.nextBoolean r)]
(assoc xs i ((if b inc dec) (xs i)))))
Эта функция выбирает индекс и затем увеличивает или уменьшает значение этого индекса на 1. Разумеется, вы должны изменить эту функцию в соответствии со своими потребностями.
Тогда просто составить эту функцию с самим собой столько раз, сколько вы хотите запустить симуляцию:
user=> ((apply comp (repeat 1000 f)) [0 0 0 0 0 0 0])
[7 -4 7 6 10 0 -6]