extsubsopЗамените операндами доменного элемента
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
extsubsop(d, i1 = new1, i2 = new2, …)
extsubsop(d, i = new) возвращает копию доменного элемента d с i-th операнд внутреннего представления, замененного new.
Внутренне, доменный элемент может состоять из произвольного числа объектов. extsubsop заменяет один или несколько из этих объектов, не проверяя, значима ли замена.
Операнды элементов областей библиотеки MuPAD® должны удовлетворить определенным (недокументированным) условиям; используйте extsubsop только для ваших собственных областей. Это - хороший стиль программирования, чтобы использовать extsubsop только в низкоуровневых доменных методах.
extsubsop возвращает измененную копию объекта, но не изменяет сам объект.
Нумерация операндов совпадает с тем, используемым extop.
Если 0-th операнд должен быть заменен, соответствующее новое значение должно быть областью типа DOM_DOMAIN; extsubsop затем заменяет область d этой новой областью.
При попытке заменить i-th операнд с i, превышающим фактическое количество операндов, extsubsop сначала увеличивает число операндов путем добавления столько же NIL по мере необходимости и затем выполняет замену. Cf. Пример 3.
Когда i-th операнд заменяется последовательностью выражения элементов k, каждый из этих элементов становится отдельным операндом результата, индексированного от i до i+k-1. Остающиеся операнды d переключены направо соответственно. Эта новая нумерация уже в действительности для остающихся замен в том же вызове extsubsop. Cf. Пример 4.
Пустой объект null() становится операндом результата, когда этим заменяют в объект.
После выполнения замены extsubsop не оценивает результат еще раз. Cf. Пример 5.
В отличие от функционального subsop, не может быть перегружен extsubsop.
Как extop и extnops, extsubsop может быть применен к объектам области ядра. В этом случае extsubsop ведет себя как subsop.
Мы создаем доменный элемент и затем заменяем его первый операнд:
d := newDomain("1st"): e := new(d, 1, 2, 3): extsubsop(e, 1 = 5)![]()
Это не изменяет значение e:
e
![]()
delete d, e:
Доменный тип элемента может быть изменен, заменив его 0-th операнд:
d := newDomain("some_domain"): e := new(d, 2):
extsubsop(e, 0 = Dom::IntegerMod(5))![]()
delete d, e:
Мы заменяем шестым операндом доменного элемента, который имеет меньше чем шесть операндов. В таких случаях вставляется соответствующее количество NIL:
d := newDomain("example"): e := new(d, 1, 2, 3, 4):
extsubsop(e, 6 = 8)![]()
delete d, e:
Мы заменяем первым операндом доменного элемента e последовательностью с тремя элементами. Они становятся первыми тремя операндами результата; второй операнд e становится четвертым операндом результата и так далее. Эта новая нумерация состоит уже в действительности в том, когда вторая замена выполняется:
d := newDomain("example"): e := new(d, 1, 2, 3, 4):
extsubsop(e, 1 = (11, 13, 17), 2 = (29, 99))![]()
delete d, e:
Мы задаем область с ее собственным методом оценки. Этот метод распечатывает свой аргумент, таким образом, что мы видим, называется ли он. Затем мы задаем элемент нашей области.
d := newDomain("anotherExample"):
d::evaluate := x -> (print("Argument:", x); x):
e := new(d, 3)![]()
Мы можем теперь смотреть все оценки, которые происходят: extsubsop оценивает свои аргументы, выполняет желаемую замену, но не оценивает результат замены:
extsubsop(e, 1 = 0)
![]()
![]()
delete d, e:
extsubsop применился к объекту от урожаев типа ядра тот же результат как subsop:
extsubsop([1,2,3], 2=4), subsop([1,2,3], 2=4)
![]()
|
Произвольный объект MuPAD |
|
Неотрицательные целые числа |
|
Произвольные объекты MuPAD |
Входной объект с замененными операндами.