%
, last
Доступ к ранее вычисленному объекту
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
%
% n
last(n
)
last()
или %
возвращают результат последней команды.
last(n)
или %n
возвращают результат n
th предыдущая команда.
По умолчанию MuPAD® хранит последние 20 команд и их результаты во внутренней таблице истории. last(n)
возвращает запись результата n
th элемент в этой таблице, считаемой от конца таблицы. Таким образом last(1)
возвращает результат последней команды, last(2)
возвращает результат рядом с в последний раз один, и т.д. Вместо last(n)
, который можно также записать более кратко %n
. Вместо last(1)
или %1
, можно использовать еще более кратко %
.
HISTORY
переменной окружения определяет количество предыдущих результатов, к которым можно получить доступ на интерактивном уровне, т.е. количестве записей в таблице истории. В процедурах длина этой таблицы всегда равняется 3, независимому от значения HISTORY
. Таким образом допустимые значения для n
являются целыми числами между 1
и HISTORY
на интерактивном уровне, и целыми числами 1, 2, 3
в процедуре.
Используйте history
, чтобы получить доступ к записям таблицы истории на интерактивном уровне непосредственно, включая команду, которая привела к соответствующему результату.
Результат, возвращенный last
или %
, не оценен снова. Используйте функциональный eval
, чтобы обеспечить последующую оценку. Смотрите Пример 4.
last
ведет себя по-другому на интерактивном уровне и в процедурах. На интерактивном уровне, составных операторах, таких как for
, repeat
, и циклы while
и if
и команды ветвления case
, хранится в таблице истории в целом. В процедурах операторы в составном операторе хранятся в отдельной таблице истории этой процедуры, но не самом составном операторе. Смотрите Пример 5.
Команды и их результаты хранятся в таблице истории, даже если вывод подавлен двоеточием. Таким образом результат last(n)
может отличаться от n
th предыдущий вывод, который видим на экране на интерактивном уровне. Смотрите Пример 1.
Команды, появляющиеся на той же входной строке, ведут, чтобы разделить записи в таблице истории, если они разделяются двоеточием или точкой с запятой. Напротив, последовательность выражения рассматривается как одна команда. Смотрите Пример 2.
Команды, которые читаются из файла через fread
или read
, хранятся в таблице истории перед fread
или самой командой read
. Если опция, Plain
используется, то отдельная таблица истории допустима в файле и командах из файла, не появляется в таблице истории контекста включения. Смотрите страницу справки history
для примеров.
Используя last
в процедурах обычно рассматривается плохим стилем программирования и поэтому удерживается от использования. Будущие релизы MuPAD больше не могут поддерживать использование last
в рамках процедур.
Если сокращенный синтаксис, %n
используется, то n
должен быть положительным целым числом буквально. Если дело обстоит не так, но n
оценивает к положительному целому числу, используйте эквивалентное функциональное обозначение last(n)
(см. Пример 3).
Вот некоторые примеры для использования last
на интерактивном уровне. Обратите внимание на то, что last(n)
отсылает к n
th ранее вычисленный результат, было ли это отображено или нет:
a := 42; last(1), %, %1
a := 34: b := 56: last(2) = %2
Команды, появляющиеся на одной входной строке, ведут, чтобы разделить записи в таблице истории:
"First command"; 11: 22; 33:
last(1), last(2);
Если последовательность команд заключается в скобки, она рассматривается как одна команда:
"First command"; (11: 22; 33:)
last(1), last(2);
Последовательность выражения также рассматривается как одна команда:
"First command"; 11, 22, 33;
last(1), last(2);
Вследствие того, что синтаксический анализатор MuPAD ожидает номер после знака %
, существует различие между использованием %
и last
. last
может быть вызван выражением, которое оценивает к положительному целому числу:
n := 2: a := 35: b := 56: last(n)
Если вы пробуете то же самое %
, ошибка происходит:
n := 2: a := 35: b := 56: %n
Error: Unexpected 'identifier'. [line 1, col 28]
Результат last
не оценен снова:
delete a, b: c := a + b + a: a:= b: %2
Используйте eval
, чтобы осуществить оценку:
eval(%)
Мы демонстрируем различие между использованием last
на интерактивном уровне и в процедурах:
1: for i from 1 to 3 do i: print(%): end_for:
Здесь last(1)
относится к новой записи в таблице истории, которая является 1
, выполняемым перед циклом for
. Мы можем также проверить это путем осмотра таблицы истории после этих команд. Команда history
возвращает список с двумя элементами. Первая запись является ранее вводимой командой MuPAD, и вторая запись является результатом этой команды, возвращенной MuPAD. Вы видите, что таблица истории содержит целый цикл for
как одну команду:
history(history() - 1), history(history())
[1, 1], [(for i from 1 to 3 do i; print(%) end_for), null()]
Однако, если цикл for
, заданный выше, выполняется в процедуре, то мы получаем различный результат. В следующем примере last(1)
относится к последнему выполненному выражению, а именно, i
в цикле:
f := proc() begin 1: for i from 1 to 3 do i: print(last(1)): end_for end_proc:
f():
Команда history
относится только к интерактивным входным параметрам и их результатам:
history(history())
|
Положительное целое число |
Объект MuPAD.