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 не является сверхзагружаемым для областей ядра.

Примеры

Пример 1

Вызов op(object) возвращает все операнды:

op([a, b, c, [d, e], x + y])

op(a + b + c^d)

op(f(x1, x2, x3))

Пример 2

Вызов op(object, i) извлекает один операнд:

op([a, b, c, [d, e], x + y], 4)

op(a + b + c^d, 3)

op(f(x1, x2, x3), 2)

Пример 3

Вызов 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)

Пример 4

Вызов 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])

Пример 5

Несуществующие операнды возвращены как FAIL:

op([a, b, c, [d, e], x + y], 8), op(a + b + c^d, 4),
op(f(x1, x2, x3), 4)

Пример 6

Для выражений типа 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)

Пример 7

Для областей библиотеки 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:

Пример 8

Идентификаторы, целые числа, действительные числа с плавающей запятой, символьные строки и булевы константы являются “атомарными” объектами. Единственный операнд является самим объектом:

op(x), op(17), op(0.1234), op("Hello World!")

Для рациональных чисел операнды являются числителем и знаменателем:

op(17/3)

Для комплексных чисел операнды являются действительной частью и мнимой частью:

op(17 - 7/3*I)

Пример 9

Для наборов 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:

Пример 10

Операнды списка являются его записями:

op([a, b, c, [d, e]])

op([[a11, a12], [a21, a22]], [2, 1])

Пример 11

Внутренне, операнды массивов и 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))

Пример 12

Операнды таблицы состоят из уравнений, связывающих индексы и соответствующие записи:

T := table((1, 2) = x + y, "diff(sin)" = cos, a = b)

op(T)

delete T:

Пример 13

Последовательности выражения не сглажены:

op((a, b, c), 2)

Обратите внимание, однако, что аргументы, переданные op, оценены. В следующем вызове оценка x сглаживает этот объект:

x := hold((1, 2), (3, 4)):  op(x, 1)

Используйте val, чтобы предотвратить упрощение x:

op(val(x), 1)

delete x:

Параметры

object

Произвольный объект MuPAD

i, j

Неотрицательные целые числа

i1, i2, …

Неотрицательные целые числа или области значений таких целых чисел

Возвращаемые значения

последовательность операндов или требуемого операнда. FAIL возвращен, если никакой соответствующий операнд не существует.

Перегруженный

object

Алгоритмы

Мы объясняем значение “операндов” для некоторых типов основных данных:

  • Идентификаторы, целые числа, действительные числа с плавающей запятой, символьные строки, а также булевы константы являются “атомарными” объектами. У них есть только один операнд: сам объект. Cf. Пример 8.

  • Рациональное число типа DOM_RAT имеет два операнда: числитель и знаменатель. Cf. Пример 8.

  • Комплексное число типа DOM_COMPLEX имеет два операнда: действительная часть и мнимая часть. Cf. Пример 8.

  • Операнды набора являются его элементами.

    Примечание

    Обратите внимание на то, что упорядоченное расположение элементов, как распечатано на экране не обязательно совпадает с внутренним упорядоченным расположением, упомянутым op. Cf. Пример 9.

  • Операнды списка являются его элементами. Cf. Пример 10.

  • Операнды массивов и 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 в предыдущих примерах), аргументы вызова функции являются дальнейшими операндами.

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

Функции MuPAD