Циклы указателя в clojure

Я пишу программу clojure, которая анализирует XML. В рамках этого я хочу создать дерево узлов в XML-документе на основе функции clojure.xml / parse. Однако я бы хотел, чтобы дерево было двунаправленным, то есть каждый узел имел список дочерних элементов и указатель на своего родителя. Есть только одна проблема: все данные неизменяемы, поэтому я не могу «добавить» указатель на родительский объект, не изменяя потомка, что делает указатель родителя бесполезным.

Я нашел ответ: Как можно создавать циклические (и неизменяемые) структуры данных в Clojure без лишних косвенных указаний?

Предлагаемое решение, похоже, создает отдельную карту индекса, которая относится к предметы внутри. Это кажется огромным объемом работы для гораздо худшего решения. У меня не было бы проблем с изменением дерева во время строительства, однако я не могу понять, как это можно сделать. Неужели нет возможности получить циклический указатель в clojure?

Спасибо!

8
задан Community 23 May 2017 в 12:16
поделиться