Подтвердить что ты не робот

Простой способ заменить n-й элемент в векторе в clojure?

Например, у меня есть вектор [1, 2, 3], и я хочу обновить второй элемент, чтобы вектор стал [1, 5, 3]. На других языках я бы просто сделал что-то вроде array[1] = 5, но я не знаю ничего, что позволило бы мне сделать это легко в Clojure.

Мысли о том, как это сделать, или о том, следует ли использовать другую структуру данных?

4b9b3361

Ответ 1

assoc отлично работает. Он принимает индекс, где нужно поместить новое значение и вернуть вновь созданный вектор:

Clojure> (assoc [1 2 3] 1 5)
[1 5 3]

Ответ 2

Ив ответ не показывает, как обновить исходный вектор.

Это делает, но как Clojure noob, я не уверен, что это лучший способ:

main=> (def ar [1 2 3])
#'main/ar
main=> ar
[1 2 3]
main=> (def ar (assoc ar 1 5))
#'main/ar
main=> ar
[1 5 3]