Численные методы и программирование с Maxima
4.2 Ввод-вывод в пакете Maxima
В этом разделе рассматриваются конструкции, позволяющие осуществить обмен данными между Maxima и другими приложениями.
4.2.1 Ввод-вывод данных в консоли
Основная функция для считывания вводимых пользователем данных: . Вводимые выражения
при вводе интерпретируются. Поля ввода разделяются точками с запятой или знаком $. Аргументы функции
могут включать подсказку.
Пример:
(%i1) a:42$ (%i2) a:read("Значение a = ",a," введите новую величину") ; Значение a = 42 введите новую величину (p+q)^3;

(%i3) display(a);

Аналогичная функция осуществляет только ввод данных (без их интерпретации).
Пример (сравнение использования функций и
):
(%i1) a:7$ (%i2) readonly("Введите выражение:"); Введите выражение: 2^a;

(%i3) read("Введите выражение:"); Введите выражение: 2^a;

Вывод на экран осуществляется функцией . Синтаксис её вызова:
.
Выражения из списка аргументов выводятся слева направо (сначала само выражение, а затем после знака равенства — его значение).
Аналогичная функция (синтаксис вызова:
) выводит на экран только значение выражения после его интерпретации.
Функция осуществляет вывод в консоль Maxima аналогично
, но в форме, удобной для ввода с клавиатуры.
(%i1) a:1$ b:2$ c:3$ (%i4) display(a,b,c);

(%i5) disp(a,b,c);

(%i6) grind(a);

Управление консольным вводом/выводом осуществляется посредством установки флагов и т.п.
Вывод на экран длинных выражений по частям (одна часть над другой) осуществляется функцией (синтаксис вызова:
).
Кроме того, для вывода результатов вычислений используется функция . Синтаксис вызова:
. Выражения
интерпретируются и выводятся последовательно в строчку (в отличие от вывода, генерируемого функцией
). Функция
возвращает значение последнего интерпретированного выражения.
Пример:
(%i1) a:1$ b:2$ c:(a^2+b^2)$ (%i4) rez:print("Пример:",a,b,c); Пример: 1 2 5

(%i5) rez;

(%i6) display("Пример:",a,b,c); Пример:=Пример:

4.2.2 Файловые операции ввода-вывода
4.2.2.1 Ввод-вывод текстовых данных
Сохранение текущего состояния рабочей области Maxima осуществляется при помощи функции . Эта функция позволяет сохранить в файле отдельные объекты с указанными именами. Варианты вызова
1Не забудьте, что имя файла должно быть строкой и заключено в прямые кавычки, например: save("foo.l", all)$, или вычислено в свое строковое значение с помощью двух одинарных кавычек: s:"foo.l"$ save(''s,all)$.:
— сохраняет текущие значения переменных
в файле
. Аргументы должны быть именами переменных, функций или других объектов. Если имя не ассоциируется с какой-либо величиной в памяти, оно игнорируется. Функция save возвращает имя файла, в который сохранены заданные объекты.
— сохраняет все значения переменных, функций, меток и т.п.
— сохраняет все значения меток ввода/вывода в промежутке от
до
(
— целые литералы).
— позволяет сохранить объекты Maxima с заменой имени
на имя
.
— сохраняет все объекты, имеющиеся в памяти.
Глобальный флаг управляет режимом записи. Если
, результаты вывода
добавляются в конец файла результатов. Иначе файл результата переписывается. Вне зависимости от
, если файл результатов не существует, то он создаётся.
Данные, сохранённые функцией , могут быть снова загружены функцией
(см. ниже).
Варианты записи при помощи save могут совмещаться друг с другом (пример: (
, [11,17]).
Загрузка предварительно сохранённого функцией файла осуществляется функцией
.
Аналогичный синтаксис и у функции , которая предназначена для вывода в файл выражений Maxima в формате, пригодном для последующего считывания Maxima.
Синтаксис вызова
Функция вычисляет выражения в файле
, создавая таким образом переменные, функции, и другие объекты
Maxima. Если объект с некоторым именем уже присутствует в
Maxima, при выполнении
он будет замещён считываемым. Чтобы найти загружаемый файл, функция
использует переменные
и
как справочники поиска. Если загружаемый файл не найден, печатается сообщение об ошибке.
Загрузка работает одинаково хорошо для кода на Lisp и кода на макроязыке Maxima. Файлы, созданные функциями содержат код на Lisp, а созданные при помощи функции
содержат код Maxima. Все эти файлы могут с равным успехом быть обработаны функцией
использует функцию
, чтобы загрузить файлы Lisp и
, чтобы загрузить файлы Maxima.
Load не распознаёт конструкции :lisp в файлах, содержащих код на Maxima, а также глобальные переменные , и
, пока не будут созданы соответствующие объекты в памяти.
Функция предназначена для загрузки файлов, содержащих код на Lisp, созданные функциями
. Для задач конечного пользователя удобнее функция
.
Протокол сессии Maxima может записываться при помощи функции (он записывается в формате вывода на консоль). Для тех же целей используется функция
(запись в конец существующего файла). Завершение записи и закрытие файла протокола осуществляется функцией
. Синтаксис вызова:
.
4.2.2.2 Ввод-вывод командных файлов
Основная функция, предназначенная для ввода и интерпретации командных файлов — функция Функция
читает выражения Maxima из файла
и выполняет их. Функция
отыскивает
в списке
. имя файла
включает последовательность выражений Maxima, каждое из которых должно оканчиваться ; или $. Специальная переменная
и функция
обращаются к предыдущим результатам в пределах файла. Файл может включать конструкции :lisp. Пробелы, табуляции, символы конца строки в файле игнорируются. Подходящий входной файл может быть создан редактором текста или функцией
.
Функция считывает каждое выражение из файла
, показывает ввод в консоли, вычисляет соответствующие выражения и показывает вывод также в консоли. Метки ввода назначаются входным выражениям, метки вывода — результатам вычислений, функция
интерпретирует каждое входное выражение, пока не будет достигнут конец файла. Если предполагается реакция пользователя (ввод с клавиатуры), выполнение
приостанавливается до завершения ввода. Для остановки выполнения batch-файла используется Ctrl-C.
Функция считывает и интерпретирует выражения из командного файла, но не выводит на консоль входных и выходных выражений. Метки ввода и вывода выражениям, встречающимся в командном файле, также не назначаются. Специальная переменная
и функция
обращаются к предыдущим диалоговым меткам, не имея результатов в пределах файла. Кроме того, файл
не может включать конструкции :lisp.