Ваша функция обновления работает не так, как вы ожидаете.
(assoc w index value)
Создает новый вектор на основе w, за исключением того, что элемент в index теперь значение . не меняется w .
user> (def w [1 2 3])
user> (assoc w 0 9)
[9 2 3]
user> w
[1 2 3]
Кроме того, вы не используете цикл / рекурсивно.Вы начинаете цикл с i, привязанного к -1, намереваясь использовать его в качестве индекса для w, но recur вызывает цикл не со следующим значением i, а с измененной копией w, возвращаемой update.
Попробуйте что-то вроде:
(def w [1 2 3])
(loop [i 0, v w]
(if (< (count w) i)
v
(recur (inc i) (assoc v i 3))))
Но, поскольку вы фактически не используете индекс для вычисления нового значения элемента, вы можете использовать map вместо цикла,Поскольку просто устанавливая для каждого элемента постоянное значение без учета его старого значения, вы можете использовать встроенную функцию clojure постоянно .
(vec (map (constantly 3) w))
Карта возвращает последовательность, я обернул еев вызове vec , чтобы преобразовать его обратно в вектор.