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 и типов данных.

Методы nopsop expr)печать, indent, chars теперь доступны для обработки с деревьями.

Примеры

Пример 1

Создание простого дерева только с двумя листами. Чтобы получить доступ и отобразить дерево, это должно быть присвоено переменной:

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

Пример 2

Получите операнды дерева: Также поддерево может быть операндом:

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])

Пример 3

Символами по умолчанию является ["|", "+", "-", „", " "]:

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

Пример 4

Дерево визуализирует структуру выражения:

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())

Параметры

tree

Дерево, данное как специальный список (см. детали),

Методы

развернуть все

nops()

В этом примере T имеет 4 операнды, числа 3, 4, 1 и поддерево adt::Tree([_mult, 5, 3]).

op(<n>)

T::op(n) возвращает заданные операнды дерева. n может быть номер между 0 и T::nops()(0 дает корень дерева), последовательность i..j (чтобы возвратить i th в j th операнд), или список, чтобы задать операнды поддеревьев (точно что касается ядра функционируют op). T::op() возвращает все операнды кроме 0- th как последовательность выражения. Смотрите Пример 2.

expr()

print()

indent(<n>)

chars(<list>)

Смотрите также

Функции MuPAD