adt
:: Tree
Абстрактный тип данных “Дерево”
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
adt::Tree(tree
)
adt::Tree
реализует абстрактный тип данных “Дерево”.
Дерево должно быть дано как специальный список MuPAD®. Первый объект списка является корнем дерева. Все дальнейшие объекты являются листами или поддеревьями дерева. Поддерево является снова специальным списком (как описано), и любой другой объект MuPAD будет интерпретирован как лист дерева (см. Пример 1).
Дерево может использоваться, чтобы отобразить данные в древовидной структуре с помощью функционального output::tree
(или метод "print"
дерева). Узлы и листы дерева будут распечатаны MuPAD, когда дерево будет отображено.
Дерево может также использоваться в качестве типа данных, чтобы сохранить и обработать любые данные MuPAD.
Методы всех абстрактных типов данных должны быть названы особенно и закончатся, изменяя сам объект как побочный эффект.
T := adt::Tree([_plus, 3, 4, [_mult, 5, 3], 1])
создает дерево и присваивает его переменной T
.
Каждое дерево будет отображено как Tree
, сопровождаемый номером. Это имя сгенерировано genident
.
Чтобы отобразить содержимое дерева, функционального expose
или метода, "print"
самого дерева должен использоваться.
Весь в соответствии с методами изменяет значение самого T
. Новое присвоение на переменную (в этом примере T
) не необходимо, в отличие от всех других функций MuPAD и типов данных.
Методы nops
, op
, expr
, print
, indent
, chars
теперь доступен для обработки с деревьями.
Создание простого дерева только с двумя листами. Чтобы получить доступ и отобразить дерево, это должно быть присвоено переменной:
T := adt::Tree(["ROOT", "LEFT", "RIGHT"])
Дерево будет только распечатано его именем. Чтобы отобразить дерево, функциональный expose
или метод, "print"
дерева должен использоваться:
T::print()
ROOT | +-- LEFT | `-- RIGHT
expose(T)
ROOT | +-- LEFT | `-- RIGHT
Следующее дерево содержит два поддерева как листы:
T := adt::Tree(["ROOT", ["LROOT", "LLEFT", "LRIGHT"], ["RROOT", "RLEFT", "RRIGHT"]]): T::print()
ROOT | +-- LROOT | | | +-- LLEFT | | | `-- LRIGHT | `-- RROOT | +-- RLEFT | `-- RRIGHT
Получите операнды дерева: Также поддерево может быть операндом:
T := adt::Tree(["ROOT", ["LROOT", "LLEFT", "LRIGHT"], "MIDDLE", ["RROOT", "RLEFT", "RRIGHT"]]): T::op()
Используйте expose
, чтобы отобразить поддеревья:
map(%, expose)
LROOT RROOT | | +-- LLEFT , "MIDDLE", +-- RLEFT | | `-- LRIGHT `-- RRIGHT
Получите все операнды включая корень:
T::op(0..T::nops())
Доступ к различным операндам:
T::op(0); T::op(2..3); T::op([1, 2])
Символами по умолчанию является ["|", "+", "-", „", " "]
:
T := adt::Tree(["ROOT", ["LROOT", "LLEFT", "LRIGHT"], ["RROOT", "RLEFT", "RRIGHT"]]): T::print()
ROOT | +-- LROOT | | | +-- LLEFT | | | `-- LRIGHT | `-- RROOT | +-- RLEFT | `-- RRIGHT
Символы могут быть изменены:
T::chars(["|", "|", "_", "|", " "]): T::print()
ROOT | |__ LROOT | | | |__ LLEFT | | | |__ LRIGHT | |__ RROOT | |__ RLEFT | |__ RRIGHT
Дерево визуализирует структуру выражения:
T:= adt::Tree([_plus, [_power, [sin, x], 2], [_power, [cos, x], 2]]): T::print()
_plus | +-- _power | | | +-- sin | | | | | `-- x | | | `-- 2 | `-- _power | +-- cos | | | `-- x | `-- 2
Дерево может быть преобразовано в выражение MuPAD:
T::expr(), simplify(T::expr())
|
Дерево, данное как специальный список (см. детали), |