Я пишу программу clojure, которая анализирует XML. В рамках этого я хочу создать дерево узлов в XML-документе на основе функции clojure.xml / parse. Однако я бы хотел, чтобы дерево было двунаправленным, то есть каждый узел имел список дочерних элементов и указатель на своего родителя. Есть только одна проблема: все данные неизменяемы, поэтому я не могу «добавить» указатель на родительский объект, не изменяя потомка, что делает указатель родителя бесполезным.
Я нашел ответ: Как можно создавать циклические (и неизменяемые) структуры данных в Clojure без лишних косвенных указаний?
Предлагаемое решение, похоже, создает отдельную карту индекса, которая относится к предметы внутри. Это кажется огромным объемом работы для гораздо худшего решения. У меня не было бы проблем с изменением дерева во время строительства, однако я не могу понять, как это можно сделать. Неужели нет возможности получить циклический указатель в clojure?
Спасибо!