block
Создайте объект, защищенный от оценки
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
block(a
)
block(a)
создает блок — объект специального типа, который содержит неоцененную копию a
. Это обработано как атомарное и остается неизменным оценкой.
block
и области, выведенные этого, формируют иерархию типов данных, спроектированных, чтобы обеспечить управление оценкой определенных подвыражений. Любой объект может быть помещен как содержимое в любой тип блока.
block
область Если d
любая область блока, d(a)
создает блок, принадлежащий той области, с содержимым a
.
block(a)
помещает его аргумент в блок, не оценивая его. Для того, чтобы оценить a
обычно прежде, чем поместить его в блок, используйте eval(hold(block)(a))
.
Блоки являются инвариантными при оценке.
Блоки типа block
являются атомарными: единственный операнд блока является самим блоком.
Последовательности могут также быть помещены в блоки. В случае block
, они не сглажены. Смотрите Пример 2.
Можно создать дальнейшие области блока с помощью наследования. Это особенно полезное для создания собственного evaluate
или testtype
методы. Смотрите Пример 4.
В случае вложенных блоков, expr
и unblock
удалите только наиболее удаленный блок.
Блок является своего рода контейнером, который защищает его содержимое от оценки:
y := 1: bl:= block(1 + y)
Блоки являются атомарными; таким образом y
и 1
не отображаются как операнды:
op(bl), nops(bl)
Несмотря на то, что блоки не являются арифметическими выражениями, некоторые основные арифметические операции заданы для них:
collect(x + bl + x*bl, bl)
delete y, bl
Содержимое блока может быть извлечено и оценило использование unblock
:
y := 1: unblock(block(y))
delete y
Создайте блоки, которые представляют арифметические выражения. Для этого вам нужна ваша собственная область блока, это перегружает testtype
:
domain myblock inherits block; category Cat::BaseCategory; testtype:= (bl, T) -> if T = Type::Arithmetical or T = dom then TRUE else block::testtype(bl, T) end_if; end_domain:
Это позволяет вам, чтобы сделать нуль номера невидимым для средства анализа путем включения его в блок, но сохранить опцию, чтобы включить его в специальные функции:
f := sin(x+myblock(0))
Теперь можно управлять этим выражением, не будучи взволнован автоматическим упрощением:
expand(f)
eval(unblock(%))
|
Любой объект или последовательность объектов |
block
создает объекты его собственного типа.