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
по мере необходимости и затем выполняет замену. См. Пример 3.
Когда i
- операнд th заменяется последовательностью выражения k
элементы, каждый из этих элементов становится отдельным операндом результата, индексированного от i
к i+k-1
. Остающиеся операнды d
смещены направо соответственно. Эта новая нумерация уже в действительности для остающихся замен в том же вызове extsubsop
. См. пример 4.
Пустой объект null()
становится операндом результата, когда им подставляются в объект.
После выполнения замены, extsubsop
не оценивает результат еще раз. См. Пример 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 |
Входной объект с замененными операндами.