свойство::Таблица Dependence со всеми свойствами выражения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
property::depends(ex, …)
property::depends(...) возвращает таблицу, которая содержит всю информацию о свойствах целого входа. Эта таблица может использоваться, чтобы определить любое изменение свойств выражения.
Возвращенная таблица в основном используется в библиотеке MuPAD®, чтобы гарантировать валидность помнивших результатов помнить механизма.
Выражение MuPAD может иметь различные свойства в разное время, не изменяя его значение.
Ядро помнит, что механизм не может определить изменение свойств и возвращает неправильные результаты, когда результат зависит от свойств входа.
В этом случае расширенные помнят, что механизм, обеспеченный prog::remember, должен использоваться вместе с property::depends.
Сравнивание таблицы зависимости в разное время обнаруживает изменения свойств выражения.
Первый вызов заданного функционального has_changed инициализирует таблицу DEPENDS, которая хранит информацию зависимости:
DEPENDS := table():
has_changed :=
proc(ex)
begin
if not contains(DEPENDS, ex)
or property::depends(ex) <> DEPENDS[ex] then
DEPENDS[ex] := property::depends(ex);
TRUE
else
FALSE
end_if
end_proc:
has_changed(sin(x*PI)):Свойства не изменились:
has_changed(sin(x*PI))
![]()
Каждое изменение обнаруживается:
assume(x, Type::Integer): has_changed(sin(x*PI))
![]()
assume(x, Type::PosInt): has_changed(sin(x*PI))
![]()
assume(x >= 0): has_changed(sin(x*PI))
![]()
unassume(x): has_changed(sin(x*PI))
![]()
delete DEPENDS, has_changed:
Следующий пример показывает, что проблемы с ядром помнят механизм:
pos := proc(x)
option remember;
begin
is(x > 0)
end:
pos(x)![]()
Результат UNKNOWN хранился для входа x и возвращен, несмотря на то, что свойства x изменяются:
assume(x > 0): pos(x); assume(x < 0): pos(x)
![]()
![]()
Эта проблема может только быть решена расширенным, помнят механизм вместе с property::depends (x все еще является меньше, чем нуль):
pos := proc(x)
begin
is(x > 0)
end:
pos := prog::remember(pos, property::depends):
pos(x)![]()
После изменения свойств входа заданная функция повторно вычисляет результат:
assume(x > 0): pos(x); unassume(x): pos(x)
![]()
![]()
|
Любое выражение MuPAD |
Таблица, которая может быть по сравнению с другой таблицей зависимости