Clojure Advent Calendar 2018 の19日目の記事として、Clojureの永続データ構造について書いている。 永続データ構造とはデータの変更履歴を保存しているデータ構造である。データ構造に対して追加、更新、削除などを行った場合、もとのデータ構造を破壊せず、新しいデータ構造を返す。 Clojureとは異なり、変更前のデータ構造を破壊する例を以下に示す。0から8までの整数を持つfooを用意し、6番目の値を9に更新すると、元のfooが破壊されている。(下のようなコードはfooが破壊されることを期待して書かれるだろう。) irb(main):001:0> foo = [0, 1, 2, 3, 4, 5, 6, 7, 8] => [0, 1, 2, 3, 4, 5, 6, 7, 8] irb(main):002:0> foo[6] = 9 => 9 irb(main):003