Это хороший вопрос.Я думаю, что оба подходят для разных видов проблем.Вложенные векторы являются хорошим решением, если каждый узел может содержать переменный набор информации - в частности, системы шаблонов будут работать хорошо.Записи являются хорошим решением для небольшого числа фиксированных типов узлов, где вложение гораздо более ограничено.
Мы много работаем с разнородными деревьями записей.Каждый узел представляет один из нескольких известных типов, каждый из которых имеет свой набор известных фиксированных ключей.Причиной того, что записи лучше в этом случае, является то, что вы можете выбрать данные из узла по ключу, который является O (1) (на самом деле вызов метода Java очень быстрый), а не O (n) (где вы должны искатьчерез содержимое узла), а также, как правило, более легкий доступ.
Записи в 1.2 не совсем "закончены", но создать их самому довольно просто.У нас есть defrecord2 , который добавляет функции конструктора (new-foo), проверку полей, поддержку печати, поддержку pprint, поддержку обхода / редактирования дерева через молнии и т. Д.
Пример того, где мыиспользуйте это для представления AST или планов выполнения, где узлами могут быть такие вещи, как Join, Sort и т. д.
Векторы будут лучше для создания таких вещей, как строки, где в каждый узел может быть помещено произвольное количество вещей,Если вы можете поместить 1+
s в
, то вы не можете создать запись, которая содержит поле: p - это просто не имеет никакого смысла.Это тот случай, когда векторы гораздо более гибкие и идиоматические.