%, 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.