op
Операнды объекта
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
op(object
) op(object
,i
) op(object
,i .. j
) op(object
,[i1, i2, …]
)
op(object)
возвращает все операнды объекта.
op(object, i)
возвращает i
-th операнд.
op(object, i..j)
возвращает i
-th в j
-th операнды.
Объекты MuPAD® состоят из более простых частей: “операнды”. Функциональный op
является инструментом, чтобы анализировать объекты и извлечь отдельные части. Фактическое определение операнда зависит от типа объекта. Раздел 'Background' ниже объясняет значение для некоторых типов основных данных.
op(object)
возвращает последовательность всех операндов кроме 0-th. Этот вызов эквивалентен op(object, 1..nops(object))
. Cf. Пример 1.
op(object, i)
возвращает i
-th операнд. Cf. Пример 2.
op(object, i..j)
возвращает i
-th в j
-th операнды как последовательность выражения; i
и j
должны быть неотрицательными целыми числами с i
, меньшим или равным j
. Эта последовательность эквивалентна op(object, k) $k = i..j
. Cf. Пример 3.
op(object, [i1, i2, ...])
является сокращением от рекурсивного вызова op (... op ( op(object, i1) , i2) , ...)
, если i1, i2, ...
является целыми числами.
Вызов, такой как op(object, [i..j, i2])
с целыми числами i < j
соответствует map(op(object, i..j), op, i2)
. Cf. Пример 4.
op
возвращает FAIL
, если заданный операнд не существует. Cf. Пример 5.
Выражения доменного типа DOM_EXPR
, массивы, hfarrays, и интервалы с плавающей точкой имеют 0-th операнд.
Для выражений это - “оператор” соединение других операндов. В частности, для символьных вызовов функции это - имя функции.
Для массива и hfarrays, 0-th операнд является последовательностью, состоящей из целого числа (размерность массива) и область значений для каждого индекса массива.
Для интервала с плавающей точкой значение 0-th операнда зависит от точного типа интервала: Если интервал является объединением прямоугольников, 0-th операндом является hold(_union)
. Если интервал не является объединением и состоит только из вещественных чисел, 0-th операнд является хранением (оболочка). В остающемся случае прямоугольника с не исчезающей мнимой частью 0-th операндом является FAIL
.
Другие типы основных данных, такие как списки или наборы не имеют 0-th операнда. Cf. Пример 6.
Для областей библиотеки op
является сверхзагружаемым. В методе "op"
к внутреннему представлению можно получить доступ с extop
. Достаточно обработать случаи op(x)
, op(x, i)
и op(x, i..j)
в методе перегрузки, вызов, которым не должен быть рассмотрен op(x, [i1, i2, ...])
. Cf. Пример 7.
op
не является сверхзагружаемым для областей ядра.
Вызов op(object)
возвращает все операнды:
op([a, b, c, [d, e], x + y])
op(a + b + c^d)
op(f(x1, x2, x3))
Вызов op(object, i)
извлекает один операнд:
op([a, b, c, [d, e], x + y], 4)
op(a + b + c^d, 3)
op(f(x1, x2, x3), 2)
Вызов op(object, i..j)
извлекает область значений операндов:
op([a, b, c, [d, e], x + y], 3..5)
op(a + b + c^d, 2..3)
op(f(x1, x2, x3), 2..3)
Область значений может включать 0-th операнд, если это существует:
op(a + b + c^d, 0..2)
op(f(x1, x2, x3), 0..2)
Вызов op(object, [i1, i2, ...])
задает подоперанды:
op([a, b, c, [d, e], x + y], [4, 1])
op(a + b + c^d, [3, 2])
op(f(x1, x2, x3 + 17), [3, 2])
Также области значений подоперандов могут быть заданы:
op([a, b, c, [d, e], x + y], [4..5, 2])
op(a + b + c^d, [2..3, 1])
op(f(x1, x2, x3 + 17), [2..3, 1])
Несуществующие операнды возвращены как FAIL
:
op([a, b, c, [d, e], x + y], 8), op(a + b + c^d, 4), op(f(x1, x2, x3), 4)
Для выражений типа DOM_EXPR
0-th операнд является “оператором” соединение других операндов:
op(a + b + c, 0), op(a*b*c, 0), op(a^b, 0), op(a[1, 2], 0)
Для символьных вызовов функции это - имя функции:
op(f(x1, x2, x3), 0), op(sin(x + y), 0), op(besselJ(0, x), 0)
0-th операнд массива является последовательностью, состоящей из размерности массива и области значений для каждого индекса массива:
op(array(3..100), 0)
op(array(1..2, 1..3, 2..4), 0)
op(hfarray(3..100), 0)
op(hfarray(1..2, 1..3, 2..4), 0)
Никакой 0-th операнд не существует для других областей ядра:
op([1, 2, 3], 0), op({1, 2, 3}, 0), op(table(1 = y), 0)
Для областей библиотеки op
является сверхзагружаемым. Во-первых, новый доменный d
задан через newDomain
. Метод "new"
служит для создания элементов этого типа. Внутреннее представление области является списком всех аргументов этого метода "new"
:
d := newDomain("d"): d::new := () -> new(dom, [args()]):
Метод "op"
этой области задан. Это должно возвратить элементы отсортированной копии внутреннего списка, к которому получают доступ через extop
:
d::op := proc(x, i = null()) local internalList; begin internalList := extop(x, 1); op(sort(internalList), i) end_proc:
Путем перегрузки называется этот метод, когда операнды объекта типа d
требуют через op
:
e := d(3, 7, 1): op(e); op(e, 2); op(e, 1..2)
delete d, e:
Идентификаторы, целые числа, действительные числа с плавающей запятой, символьные строки и булевы константы являются “атомарными” объектами. Единственный операнд является самим объектом:
op(x), op(17), op(0.1234), op("Hello World!")
Для рациональных чисел операнды являются числителем и знаменателем:
op(17/3)
Для комплексных чисел операнды являются действительной частью и мнимой частью:
op(17 - 7/3*I)
Для наборов op
возвращает элементы согласно внутреннему порядку. Обратите внимание на то, что этот порядок может отличаться от упорядоченного расположения, с которым наборы распечатаны на экране:
s := {i^2 $ i = 1..19}
op(s)
Индексный доступ к элементам набора использует упорядоченное расположение, видимое на экране:
s[1], s[2], s[3]
Обратите внимание на то, что доступ к элементам набора через op
намного быстрее, чем индексируемые вызовы:
s := {sqrt(i) $ i = 1..500}: time([op(s)])/time([s[i] $ i = 1..nops(s)]);
delete s:
Операнды списка являются его записями:
op([a, b, c, [d, e]])
op([[a11, a12], [a21, a22]], [2, 1])
Внутренне, операнды массивов и hfarrays формируют “линейную” последовательность, содержащую все записи:
op(array(1..2, 1..2, [[11, 12], [21, 22]]))
op(hfarray(1..2, 1..2, [[11, 12], [21, 22]]))
Неопределенные записи возвращены как NIL
:
op(array(1..2, 1..2))
Операнды таблицы состоят из уравнений, связывающих индексы и соответствующие записи:
T := table((1, 2) = x + y, "diff(sin)" = cos, a = b)
op(T)
delete T:
Последовательности выражения не сглажены:
op((a, b, c), 2)
Обратите внимание, однако, что аргументы, переданные op
, оценены. В следующем вызове оценка x
сглаживает этот объект:
x := hold((1, 2), (3, 4)): op(x, 1)
Используйте val
, чтобы предотвратить упрощение x
:
op(val(x), 1)
delete x:
|
Произвольный объект MuPAD |
|
Неотрицательные целые числа |
|
Неотрицательные целые числа или области значений таких целых чисел |
последовательность операндов или требуемого операнда. FAIL
возвращен, если никакой соответствующий операнд не существует.
object
Мы объясняем значение “операндов” для некоторых типов основных данных:
Идентификаторы, целые числа, действительные числа с плавающей запятой, символьные строки, а также булевы константы являются “атомарными” объектами. У них есть только один операнд: сам объект. Cf. Пример 8.
Рациональное число типа DOM_RAT
имеет два операнда: числитель и знаменатель. Cf. Пример 8.
Комплексное число типа DOM_COMPLEX
имеет два операнда: действительная часть и мнимая часть. Cf. Пример 8.
Операнды набора являются его элементами.
Обратите внимание на то, что упорядоченное расположение элементов, как распечатано на экране не обязательно совпадает с внутренним упорядоченным расположением, упомянутым op
. Cf. Пример 9.
Операнды массивов и hfarrays являются его записями. Неопределенные записи возвращены как NIL
. Cf. Пример 11 и Пример 6.
Операнды таблиц являются уравнениями, сопоставляющими индекс с соответствующей записью. Cf. Пример 12.
Операнды последовательности выражения являются ее элементами. Обратите внимание на то, что такие последовательности не сглажены op
. Cf. Пример 13.
Операнды символьного вызова функции, такие как f(x, y, ...)
являются аргументами x
, y
и т.д. Имя функции f
является 0 - операнд.
В целом операнды выражений типа DOM_EXPR
даны их внутренним представлением. Существует 0-th операнд (“оператор”) соответствие типу выражения. Внутренне, оператор является системной функцией, выражение соответствует вызову функции. Например, a + b + c
должен быть интерпретирован как _plus(a, b, c)
, символьный индексируемый вызов, такой как A[i, j]
соответствует _index(A, i, j)
. Имя системной функции является 0-th операндом (т.е. _plus
и _index
в предыдущих примерах), аргументы вызова функции являются дальнейшими операндами.