Здесь есть две концепции, представляющие интерес.Во-первых, постоянные структуры данных .Если все элементы дерева являются неизменяемыми, то можно получить новое дерево из исходного дерева, заменив некоторые части, но ссылаясь на более старые части, что сэкономит время и память.
Например, если вычтобы добавить третий порт к узлу, у которого уже есть два порта, вам нужно будет создать новую сцену, потомка нового узла сцены и узел, который вы меняете.Другой узел и все порты не нужно создавать заново - вы просто ссылаетесь на них в новой сцене / узлах.
Другая концепция - застежка-молния .Молния - это способ «навигации» по постоянной структуре данных для оптимизации локальных изменений.Например, если вы добавили четыре новых порта вместо одного, но добавили каждый порт по одному, вам нужно будет создать четыре новые сцены и восемь новых узлов.С застежкой-молнией вы откладываете такие создания до тех пор, пока не закончите, экономя на этих промежуточных объектах.
Лучшее объяснение, которое я когда-либо читал о молнии, это здесь .
Использование молнии для навигации по структуре данных устраняет необходимость иметь обратные ссылки.Вы можете иметь обратные ссылки в неизменяемой структуре благодаря умному использованию рекурсивных конструкторов.Однако такая структура данных не будет постоянной .Непостоянные неизменяемые структуры данных имеют паршивую производительность модификации, потому что вам нужно каждый раз копировать все данные целиком.
Что касается академической литературы, я рекомендую структуры данных Purely Function, автор Okasaki ( диссертация PDF * 1022).*, полноценная книга ).