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 ではない場合、どのようにしてこのようなことを行うのでしょうか?