Я пытаюсь создать свой собственный неизменный тип данных/методы с помощью defrecord
в Clojure. Цель состоит в том, чтобы иметь тип данных, который я могу создавать экземпляры, а затем вызывать его методы, чтобы возвращать новую копию себя с мутированными переменными. Скажем, a и b являются векторами. Я хотел бы обновить значение в обоих и вернуть новую копию всей структуры с обновленными векторами. Это, очевидно, не компилируется, я просто пытаюсь передать свои идеи.
(defrecord MyType [a b]
(constructor [N]
; I'd like to build an initial instance, creating a and b as vectors of length N
)
(mutate-and-return []
; I'd like to mutate (assoc the vectors) and return the new structure, a and b modified
)
)
Я хотел бы вызвать конструктор, а затем мутатор столько раз, сколько захочу (есть другие функции, которые не мутируют, но я не хочу усложнять вопрос).
В качестве альтернативы, если это не идиоматический Clojure, как вы должны делать что-то вроде этого?