Я хотел бы построить «дерево разложения» в системе Mathematica.
У меня есть функция f
, которая принимает объект и возвращает все компоненты этого объекта в виде списка. Для целей этого вопроса давайте просто разложим выражения Mathematica следующим образом (мой реальный f
полагается на внешнюю базу данных для декомпозиции различных типов объектов, поэтому я не могу легко опубликовать его):
f[e_?AtomQ] := {}
f[e_] := List @@ e
Я хотел бы создать древовидный график, который показывает, как объект декомпозируется по мере того, как мы рекурсивно продолжаем применять f
. В конкретном примере f
выше мы должны получить что-то очень похожее на результат TreeForm
, за исключением того, что на каждом узле должно отображаться полное выражение (а не только заголовок). Дочерние элементы узла будут его компонентами, возвращенными f
.
Обратите внимание, что элементы могут повторяться в дереве разложения, как это, но не элементы повторяются в выходных данных TreePlot
, поскольку он работает с графиками. Одна из идей - создать уникальное «внутреннее имя» для каждого узла, построить график и использовать TreePlot, настроив его для отображения фактической формы узлов, а не их «внутреннего имени».