Численные методы и программирование с 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.