Previous: Файлы, Up: Ввод и вывод   [Contents][Index]

9.3 Функции и переменные для ввода и вывода

Системная переменная: __

__ - введенное выражение, обрабатываемое в данный момент. То есть, пока вычисляется expr, __ равно expr.

Введенное выражение присваивается переменной __ до упрощения или вычисления. Однако, значение __ упрощается (но не вычисляется) во время вывода.

__ распознается функциями batch и load. В файле, обрабатываемом с помощью batch, __ означает то же самое, что и в режиме диалога. Когда файл обрабатывается функцией load, __ имеет значения последнего, введенного в режиме диалога или пакетном файле, выражения. __ не принимает значения выражений, которые вводятся в обрабатываемом файле. В частности, если load (filename) вызывается в режиме диалога, то во время выполнения файла __ имеет значение load(filename).

См. также _ и %.

Примеры:

(%i1) print ("I was called as", __);
I was called as print(I was called as, __) 
(%o1)              print(I was called as, __)
(%i2) foo (__);
(%o2)                     foo(foo(__))
(%i3) g (x) := (print ("Current input expression =", __), 0);
(%o3) g(x) := (print("Current input expression =", __), 0)
(%i4) [aa : 1, bb : 2, cc : 3];
(%o4)                       [1, 2, 3]
(%i5) (aa + bb + cc)/(dd + ee + g(x));
                            cc + bb + aa
Current input expression = -------------- 
                           g(x) + ee + dd
                                6
(%o5)                        -------
                             ee + dd
Системная переменная: _

_ - самое последнее из введенных выражений (таких как %i1, %i2, %i3, ...).

Введенное выражение присваивается переменной _ до упрощения или вычисления. Однако, это значение упрощается (но не вычисляется) во время вывода.

_ обрабатывается функциями batch и load. Во время обработки файла функцией batch переменная _ означает то же, что и в режиме диалога. Когда файл обрабатывается функцией load, значение переменной _ принимает последнее вычисленное выражение, которое было введено в диалоговом режиме или пакетном файле. Выражения, вводимые в обрабатываемом файле, не присваиваются переменной _.

См. также __ и %.

Примеры:

(%i1) 13 + 29;
(%o1)                          42
(%i2) :lisp $_
((MPLUS) 13 29)
(%i2) _;
(%o2)                          42
(%i3) sin (%pi/2);
(%o3)                           1
(%i4) :lisp $_
((%SIN) ((MQUOTIENT) $%PI 2))
(%i4) _;
(%o4)                           1
(%i5) a: 13$
(%i6) b: 29$
(%i7) a + b;
(%o7)                          42
(%i8) :lisp $_
((MPLUS) $A $B)
(%i8) _;
(%o8)                         b + a
(%i9) a + b;
(%o9)                          42
(%i10) ev (_);
(%o10)                         42
Системная переменная: %

% - вывод (%o1, %o2, o3, ...) последнего обработанного выражения, даже если он не выводится.

% обрабатывается командами batch и load. В файле, обрабатываемом командой batch, % имеет то же значение, что и в режиме диалога. В файле, обрабатываемого командой load, Значение % принимает вывод последнего обработанного в диалоговом режиме выражения. Переменной % не присваивается вывод выражений обрабатываемого файла.

См. также _, %% и %th.

Системная переменная: %%

В составных выражениях таких как block, lambda, или (s_1, ..., s_n), %% - значение предыдущего утверждения. К примеру выражения,

block (integrate (x^5, x), ev (%%, x=2) - ev (%%, x=1));
block ([prev], prev: integrate (x^5, x),
               ev (prev, x=2) - ev (prev, x=1));

дадут один и тот же результат, то есть 21/2.

Составное выражение может быть частью другого составного выражения. И в случае простого утверждения, и в случае, когда утверждение является составным выражением, %% принимает значение предыдущего утверждения. К примеру,

block (block (a^n, %%*42), %%/6)

выдаст 7*a^n.

Внутри составного утверждения, значение %% можно проверить в диалоге команды break. К примеру, следующее выражение

block (a: 42, break ())$

открывает диалог, в котором результатом ввода %%; будет 42.

В первом утверждении составного выражения или вне составного выражения переменная %% не определена.

Переменная %% распознается функциями batch и load, и имеет то же значение, что и в режиме диалога.

См. также %.

Управляющая переменная: %edispflag

Значение по умолчанию: false

Когда %edispflag установлена равной true, Maxima отображает %e отрицательной степени. К примеру, %e^-x отображается как 1/%e^x.

Функция: %th (i)

Значение i-го предыдущего вывода. То есть, если следующим вычисленным выражением будет вывод с номером n, то %th (m) примет значение вывода с номером (n - m).

%th полезна в пакетных batch-файлах или в ссылках на группу выведенных выражений. К примеру,

block (s: 0, for i:1 thru 10 do s: s + %th (i))$

присвоит переменной s сумму последних десяти выведенных выражений.

%th обрабатывается функциями batch и load. В файле, обрабатываемом функцией batch, %th означает то же, что и в режиме диалога. В файле, обрабатываемом командой load, %th ссылается на выведенные выражения, которые были вычислены последними в режиме диалога или пакетном файле. %th не ссылается на выражения, выводимые в процессе работы load.

См. также %.

Специальный символ: ?

Стоящий перед именем функции или переменной символ ? означает что это имя функции или переменной из Lisp, а не из Maxima. К примеру, ?round означает Lisp-функцию ROUND. См. дополнительно Lisp и Maxima.

Запись ? word (вопросительный знак и следующее за ним слово разделены пробелом) эквивалентна записи describe("word"). Вопросительный знак должен находиться в начале строки ввода, иначе он не определится как запрос на документацию.

Специальный символ: ??

Запись ?? word (?? и следующее за ним слово разделяются символом пробела) эквивалентна записи descrive("word", inexact).

Управляющая переменная: absboxchar

Значение по умолчанию: !

Символ absboxchar используется для изображения знака модуля вокруг, выражений, занимающих по высоте больше одной строчки.

Управляющая переменная: file_output_append

Значение по умолчанию: false

file_output_append управляет тем, будет ли вывод в функции добавляться в конец или замещать содержимое выводимого файла. Когда file_output_append равна true, такие функции добавляют вывод к файлу, иначе выводимый файл переписывается заново.

Функции save, strungout и with_stdout учитывают file_output_append. Остальные функции, которые записываю выход во внешние файлы, не учитывают file_output_append. В частности, графические и транслирующие функции всегда замещает содержимое выводимого файла, а tex и strungout всегда дописываю в конец.

Функция: appendfile (filename)

Добавляет копию консольного вывода в filename. appendfile работает так же как и writefile, но отличие в том, что если файл существует, он всегда дописывается.

closefile закрывает трансляцию в файл открытый функциями appendfile или writefile.

Функция: batch (filename)

Считывает выражения Maxima из filename, и обрабатывает их. batch ищет filename в директориях списка file_search_maxima. См. file_search.

filename содержит последовательность выражений Maxima, завершающихся символами ; или $. Специальные переменная % и функция %th ссылаются на предыдущие результаты внутри файла. Файл может включать конструкции :lisp. Символы пробела, табуляции и новой строки в файле игнорируются. Подходящий входной файл может быть создан при помощи текстового редактора или функцией stringout.

batch считывает каждое входящее выражение из filename, отображает его ввод в консоли, вычисляет соответствующее выходящее выражение и выводит его. Входящим выражениям присваиваются входные метки, а выходящим – выходные. batch вычисляет все входящие выражения файла до тех пор пока в них не встретится ошибка. Если запрашивается пользовательский ввод (к примеру, командами asksign или askinteger), выполнение batch останавливается для сбора требуемого ввода и затем продолжается.

Возможна остановка batch нажатием control-C в консоли. Эффект нажатия control-C зависит от реализации лежащего в основе Lisp.

batch может использоваться в различных целях. Для хранения рабочих командных строк, дающих возможность проводить демонстрации без ошибок, или может помочь организовать работу над решением сложных задач.

batch вычисляет свой аргумент. batch не возвращает значений.

См. также load, batchload и demo.

Функция: batchload (filename)

Считывает выражения Maxima из filename и вычисляет их, не отображая входные и выходные выражения и не присваивая ссылок выходным выражениям. Однако, печатаемый вывод (такой, какой производят команды print или describe) отображается.

Специальная переменная % и функция %th ссылается на предыдущие результаты из режима диалога, но не на результаты внутри файла. Файл не может включать конструкции :lisp.

batchload возвращает путь к filename в виде строки. batchload вычисляет свой аргумент.

См. также batch и load.

Функция: closefile ()

Закрывает запись в файл, открытую командой writefile или appendfile.

Функция: collapse (expr)

Сворачивает выражение expr делая все его общие (т.е. равные) ссылающимися на одни ячейки памяти, тем самым сохраняя память. Функция (collapse используется командой optimize. Таким образом, вызов collapse может быть полезным до выгрузки в save файл. Можно свернуть несколько выражений вместе используя команду collapse ([expr_1, ..., expr_n]). Аналогично, можно свернуть элементы массива A при помощи команды collapse (listarray ('A)).

Функция: concat (arg_1, arg_2, ...)

Сцепляет свои аргументы. Аргументы должны быть атомами. Возвращаемое значение является символом, если первый аргумент – символ, и строкой в противном случае.

concat вычисляет свои аргументы. Одиночная кавычка ' предотвращает вычисление.

(%i1) y: 7$
(%i2) z: 88$
(%i3) concat (y, z/2);
(%o3)                          744
(%i4) concat ('y, z/2);
(%o4)                          y44

Символу, полученному с помощью concat, можно присваивать значения и использовать его в выражениях. :: (двойное двоеточие) – оператор присваивания, который вычисляет свой левый операнд.

(%i5) a: concat ('y, z/2);
(%o5)                          y44
(%i6) a:: 123;
(%o6)                          123
(%i7) y44;
(%o7)                          123
(%i8) b^a;
                               y44
(%o8)                         b
(%i9) %, numer;
                               123
(%o9)                         b

Заметьте, что несмотря на то, что concat (1, 2) выглядит как число, результат является строкой.

(%i10) concat (1, 2) + 3;
(%o10)                       12 + 3
Функция: sconcat (arg_1, arg_2, ...)

Сцепляет аргументы в строки. В отличии от concat, аргументы не обязаны быть атомами.

(%i1) sconcat ("xx[", 3, "]:", expand ((x+y)^3));
(%o1)               xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
Функция: disp (expr_1, expr_2, ...)

то же что и display, но отличается тем что значение аргументов отображаются без выражений. Это полезно для сложных аргументов, у которых нет имени или в случае, когда интерес представляет только значение без имени.

Функция: dispcon (tensor_1, tensor_2, ...)
Функция: dispcon (all)

Отображает ограничения аргументов, наложенные на них командой defcon. dispcon (all) отображает все ограничения, которые были заданы.

Функция: display (expr_1, expr_2, ...)

Отображает равенства, выравненные по центру. Левыми частями равенств являются не вычисленные выражения expr_i, a правыми – их значения. Эта функция полезна в блоках и конструкциях for для вывода промежуточных результатов. Аргументы display обычно являются атомами, переменными с индексом, или вызовами функций. См. также disp.

(%i1) display(B[1,2]);
                                      2
                         B     = X - X
                          1, 2
(%o1)                            done
Управляющая переменная: display2d

Значение по умолчанию: true

Когда display2d равна false, консольный вывод производится в строковой (одномерной) форме, а не в наглядной (двумерной).

Управляющая переменная: display_format_internal

Значение по умолчанию: false

Когда display_format_internal равна true, выражения отображаются без преобразования, которое "прячет" внутреннее математическое представление. Тогда вывод соответствует результату функции inpart, а не part.

Примеры:

User     part       inpart
a-b;      a - b     a + (- 1) b

           a            - 1
a/b;       -         a b
           b
                       1/2
sqrt(x);   sqrt(x)    x

          4 X        4
X*4/3;    ---        - X
           3         3
Функция: dispterms (expr)

Выводит друг под другом части expr. Первым отображается оператор выражения expr, затем каждое слагаемое суммы, множители произведения или части более общего выражения отображаются отдельно. Это полезно, когда expr слишком большое для иных способов отображения. К примеру, если P1, P2, ... – очень большие выражения, то программе может не хватить памяти при попытке отобразить P1 + P2 + ... как единое целое. Однако, dispterms (P1 + P2 + ...) отображает P1, затем ниже P2 и т. д. Если не использовать dispterms, когда показательное выражение слишком широко, для отображения в виде A^B, то оно выводится в виде expt (A, B) (или ncexpt (A, B) в случае A^^B).

Управляющая переменная: error_size

Значение по умолчанию: 10

error_size изменяет сообщения об ошибках, в зависимости от размера выражения, которое появляется в нем. Если размер выражения (определенный с помощью Lisp-функции ERROR-SIZE) больше чем error_size, выражение замещается символом, а символу присваивается выражение. Символы берутся из списка error_syms.

В противном случае, когда выражение меньше чем error_size, оно и выводится в сообщении.

См. также error и error_syms.

Пример:

ERROR-SIZE задает размер U равным 24.

(%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$

(%i2) error_size: 20$

(%i3) error ("Example expression is", U);

Example expression is errexp1
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) errexp1;
                            E
                           D
                          C   + B + A
(%o4)                    --------------
                         cos(X - 1) + 1
(%i5) error_size: 30$

(%i6) error ("Example expression is", U);

                         E
                        D
                       C   + B + A
Example expression is --------------
                      cos(X - 1) + 1
 -- an error.  Quitting.  To debug this try debugmode(true);
Управляющая переменная: error_syms

Значение по умолчанию: [errexp1, errexp2, errexp3]

В сообщениях об ошибках, выражения большие чем error_size заменяются символами и присваиваются этим символам. Символы берутся из списка error_syms. Первое слишком большое выражения заменяется символом error_syms[1], второе символом error_syms[2] и так далее.

Если слишком больших выражений больше чем элементов в error_syms, то символы генерируются автоматически, n-ный символ равен concat ('errexp, n).

См. также error и error_size.

Функция: expt (a, b)

Если показательное выражение слишком широко для отображения в виде a^b), оно выводится в виде expt (a, b) (или ncexpt (a, b) в случае a^^b).

expt и ncexpt не распознаются при вводе.

Управляющая переменная: exptdispflag

Значение по умолчанию: true

Когда exptdispflag равна true, Maxima отображает выражения с отрицательными степенями в виде дробей, например X^(-1) в виде 1/X.

Функция: filename_merge (path, filename)

Составляет путь из path и filename. Если последняя часть пути path имеет форму ###.something, эта часть заменяется на filename.something. В противном случае последняя часть заменяется на filename.

Результатом является объект пути Lisp.

Функция: file_search (filename)
Функция: file_search (filename, pathlist)

file_search ищет файл filename и возвращает путь к этому файлу (в виде строки), если может его найти, иначе возвращает false. file_search (filename) ищет в определенных по умолчанию каталогах для поиска, которые указаны в переменных file_search_maxima, file_search_lisp и file_search_demo.

Перед попыткой сопоставить имя с шаблонами поиска файлов. file_search первым делом проверяет существование искомого файла. См. file_search_maxima о шаблонах поиска файла.

Аргумент filename может быть как путем с именем, так и просто именем файла. Если каталог включен в пути поиска вместе с поисковым шаблоном файла, то filename может быть именем без расширения. В примере

file_search ("/home/wfs/special/zeta.mac");
file_search ("zeta.mac");
file_search ("zeta");

будет найден один и тот же файл, если он существует и /home/wfs/special/###.mac включен в file_search_maxima.

file_search (filename, pathlist) осуществляет поиск в каталогах, заданных переменной pathlist, которая представляет из себя список строк. Аргумент pathlist замещает каталоги поиска, определенные по умолчанию, так если дан список путей, file_search ищет только в заданных там и не ищет в путях по умолчанию. Даже если pathlist содержит только один каталог, pathlist должен быть задан, как список из одного элемента.

Пользователь может изменять пути, определенные по умолчанию. См. file_search_maxima.

file_search используется функцией load, шаблоны поиска файлов берутся из file_search_maxima и file_search_lisp.

Управляющая переменная: file_search_maxima
Управляющая переменная: file_search_lisp
Управляющая переменная: file_search_demo

Эти переменные задают списки каталогов, в которых производят поиск функции load, demo и некоторые другие функции Maxima. По умолчанию в них заданы различные каталоги из путей установки Maxima.

Пользователь может изменить эти переменные, удалить значения по умолчанию или добавить дополнительные каталоги. Например,

file_search_maxima: ["/usr/local/foo/###.mac",
    "/usr/local/bar/###.mac"]$

удаляет начальные директории списка file_search_maxima, в то время как

file_search_maxima: append (file_search_maxima,
    ["/usr/local/foo/###.mac", "/usr/local/bar/###.mac"])$

добавляет две дополнительные директории. Иногда удобно разместить такие выражения в файле maxima-init.mac, чтобы путь поиска файла назначался автоматически при запуске Maxima.

При помощи шаблонов поиска файлов можно определить несколько расширений файлов и несколько путей. Строка ### заменяется запрашиваемым именем, в то время как список разделенных запятыми имен, заключенный в фигурные скобки, {foo,bar,baz} раскрывается в множество строк. В качестве примера предположим, что искомое имя – neumann, тогда

"/home/{wfs,gcj}/###.{lisp,mac}"

раскроется в /home/wfs/neumann.lisp, /home/gcj/neumann.lisp, /home/wfs/neumann.mac и /home/gcj/neumann.mac.

Функция: file_type (filename)

Возвращает предположение о содержимом filename, на основе его расширения. filename не должен ссылаться на существующий файл, не происходит попыток открыть файл и проверить содержимое.

Возвращаемое значение является одним из символов: object, lisp или maxima. Если расширение начинается на m или d, file_type возвращается maxima. Если расширение начинается на l, file_type возвращается lisp. Если ни один из перечисленных вариантов, то file_type возвращается object.

Функция: grind (expr)
Управляющая переменная: grind

Функция grind выводит expr в консоль в форме подходящем для ввода в Maxima. grind всегда возвращает done.

Когда expr является именем функции или макрокоманды, grind печатает определение функции или макрокоманды вместо просто имени.

См. также string, которая возвращает строку, а не печатает вывод. grind пытается печатать выражение способом, который делает его проще для чтения, чем вывод команды string.

Когда переменная grind равна true, вывод string и stringout имеет тот же вид, что и вывод grind. В противном случае специального форматирования вывода этих функций не производится. По умолчанию значение переменной grind равно false.

grind может так же быть задана как аргумент playback. Когда grind задана, playback печатает входное выражение в таком же виде как функция grind. В противном случае специального форматирования вывода не производится.

grind вычисляет свой аргумент.

Примеры:

(%i1) aa + 1729;
(%o1)                       aa + 1729
(%i2) grind (%);
aa+1729$
(%o2)                         done
(%i3) [aa, 1729, aa + 1729];
(%o3)                 [aa, 1729, aa + 1729]
(%i4) grind (%);
[aa,1729,aa+1729]$
(%o4)                         done
(%i5) matrix ([aa, 17], [29, bb]);
                           [ aa  17 ]
(%o5)                      [        ]
                           [ 29  bb ]
(%i6) grind (%);
matrix([aa,17],[29,bb])$
(%o6)                         done
(%i7) set (aa, 17, 29, bb);
(%o7)                   {17, 29, aa, bb}
(%i8) grind (%);
{17,29,aa,bb}$
(%o8)                         done
(%i9) exp (aa / (bb + 17)^29);
                                aa
                            -----------
                                     29
                            (bb + 17)
(%o9)                     %e
(%i10) grind (%);
%e^(aa/(bb+17)^29)$
(%o10)                        done
(%i11) expr: expand ((aa + bb)^10);
         10           9        2   8         3   7         4   6
(%o11) bb   + 10 aa bb  + 45 aa  bb  + 120 aa  bb  + 210 aa  bb
         5   5         6   4         7   3        8   2
 + 252 aa  bb  + 210 aa  bb  + 120 aa  bb  + 45 aa  bb
        9        10
 + 10 aa  bb + aa
(%i12) grind (expr);
bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6
     +252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2
     +10*aa^9*bb+aa^10$
(%o12)                        done
(%i13) string (expr);
(%o13) bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6\
+252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2+10*aa^9*\
bb+aa^10
(%i14) cholesky (A):= block ([n : length (A), L : copymatrix (A),
  p : makelist (0, i, 1, length (A))], for i thru n do
  for j : i thru n do
  (x : L[i, j], x : x - sum (L[j, k] * L[i, k], k, 1, i - 1),
  if i = j then p[i] : 1 / sqrt(x) else L[j, i] : x * p[i]),
  for i thru n do L[i, i] : 1 / p[i],
  for i thru n do for j : i + 1 thru n do L[i, j] : 0, L)$
(%i15) grind (cholesky);
cholesky(A):=block(
         [n:length(A),L:copymatrix(A),
          p:makelist(0,i,1,length(A))],
         for i thru n do
             (for j from i thru n do
                  (x:L[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),
                   if i = j then p[i]:1/sqrt(x)
                       else L[j,i]:x*p[i])),
         for i thru n do L[i,i]:1/p[i],
         for i thru n do (for j from i+1 thru n do L[i,j]:0),L)$
(%o15)                        done
(%i16) string (fundef (cholesky));
(%o16) cholesky(A):=block([n:length(A),L:copymatrix(A),p:makelis\
t(0,i,1,length(A))],for i thru n do (for j from i thru n do (x:L\
[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),if i = j then p[i]:1/sqrt(x\
) else L[j,i]:x*p[i])),for i thru n do L[i,i]:1/p[i],for i thru \
n do (for j from i+1 thru n do L[i,j]:0),L)
Управляющая переменная: ibase

Значение по умолчанию: 10

Целые вводимые в Maxima распознаются с учетом основания системы счисления ibase.

Переменной ibase может быть присвоено значение между 2 и 35 (в десятичной), включительно. Когда ibase больше чем 10, в состав цифр входят десятичные цифры от 0 до 9 и заглавные буквы алфавита A, B, C, ..., по мере необходимости.

Цифры для основания 35, наибольшего возможного, включают цифры от 0 до 9 и буквы от A до Z.

См. также obase.

Управляющая переменная: inchar

Значение по умолчанию: %i

inchar – префикс перед метками выражений, вводимых пользователем. Maxima автоматически генерирует ссылку для каждого входного выражения, соединяя inchar и linenum. Переменной inchar может быть присвоена любая строка или обозначение, не обязательно состоящее из одной буквы.

(%i1) inchar: "input";
(%o1)                                input
(input1) expand ((a+b)^3);
                            3        2      2      3
(%o1)                      b  + 3 a b  + 3 a  b + a
(input2)

См. также labels.

Функция: ldisp (expr_1, ..., expr_n)

Отображает выражения expr_1, ..., expr_n в консоли как в печатном выводе. ldisp присваивает метки промежуточных выражений для каждого аргумента и возвращает список меток.

См. также disp.

(%i1) e: (a+b)^3;
                                   3
(%o1)                       (b + a)
(%i2) f: expand (e);
                     3        2      2      3
(%o2)               b  + 3 a b  + 3 a  b + a
(%i3) ldisp (e, f);
                                   3
(%t3)                       (b + a)

                     3        2      2      3
(%t4)               b  + 3 a b  + 3 a  b + a

(%o4)                      [%t3, %t4]
(%i4) %t3;
                                   3
(%o4)                       (b + a)
(%i5) %t4;
                     3        2      2      3
(%o5)               b  + 3 a b  + 3 a  b + a
Функция: ldisplay (expr_1, ..., expr_n)

Отображает выражения expr_1, ..., expr_n в консоли как при выводе. Каждое выражение печатается в виде равенства lhs = rhs, в котором lhs – один из аргументов функции ldisplay, а rhs – его значение. Обычно каждый аргумент – переменная. ldisp присваивает метки промежуточных выражений каждому равенству и возвращает список меток.

См. также display.

(%i1) e: (a+b)^3;
                                   3
(%o1)                       (b + a)
(%i2) f: expand (e);
                     3        2      2      3
(%o2)               b  + 3 a b  + 3 a  b + a
(%i3) ldisplay (e, f);
                                     3
(%t3)                     e = (b + a)

                       3        2      2      3
(%t4)             f = b  + 3 a b  + 3 a  b + a

(%o4)                      [%t3, %t4]
(%i4) %t3;
                                     3
(%o4)                     e = (b + a)
(%i5) %t4;
                       3        2      2      3
(%o5)             f = b  + 3 a b  + 3 a  b + a
Управляющая переменная: linechar

Значение по умолчанию: %t

linechar – префикс меток промежуточных выражений, генерируемых Maxima. Maxima генерирует метки для каждого промежуточного выражения (если оно отображается), соединяя linechar и linenum. Переменной linechar может быть присвоена любая строка или символ, не обязательно одиночная буква.

Промежуточный выражения могут отображаться, а могут и не отображаться. См. programmode и labels.

Управляющая переменная: linel

Значение по умолчанию: 79

linel – ширина консоли (в символах) для вывода выражений. Пользователь может задать любое значение linel, хотя очень маленькие или очень большие значения могут оказаться неудобными. Текст выводимый встроенными функциями Maxima, такой как сообщения об ошибках и вывод describe, не зависит от linel.

Управляющая переменная: lispdisp

Значение по умолчанию: false

Когда lispdisp равна true, Lisp символы отображаются с вопросительным знаком ? перед ними. В противном случае Lisp символы отображаются без знака.

Примеры:

(%i1) lispdisp: false$
(%i2) ?foo + ?bar;
(%o2)                       foo + bar
(%i3) lispdisp: true$
(%i4) ?foo + ?bar;
(%o4)                      ?foo + ?bar
Функция: load (filename)

Вычисляет выражения в filename, тем самым загружая переменные, функции и другие объекты в Maxima. Значения любых существовавших объектов заменяются связями, полученными из filename. Для поиска файла load вызывает file_search, пути поиска берутся из file_search_maxima и file_search_lisp. Если load выполнена успешно, то возвращается имя файла, иначе печатается сообщение об ошибке.

load работает с равным успехом как для Lisp, так и для Maxima программ. Файлы, созданные командами save, translate_file и compile_file, которые создают код Lisp, и stringout, которая создает код Maxima, могут быть обработаны функцией load. load вызывает loadfile для загрузки Lisp файлов и batchload для загрузки Maxima файлов.

load не распознает конструкции :lisp в файлах Maxima, и во время обработки filename, глобальные переменные _, __, % и %th имеют те связи, которые были у них в момент вызова load.

См. также loadfile, batch, batchload и demo. batch, batchload и demo выполняют Maxima файлы.

См. file_search для более подробного ознакомления с механизмом поиска файлов.

load вычисляет свой аргумент.

Функция: loadfile (filename)

Вычисляет выражения Lisp в filename. loadfile не вызывает file_search, поэтому filename должен включать расширение и информацию о пути, достаточную для поиска файла.

loadfile может обрабатывать файлы, созданные командами save, translate_file и compile_file. Возможно, удобнее использовать load вместо loadfile.

Управляющая переменная: loadprint

Значение по умолчанию: true

loadprint управляет печатью сообщение после загрузки файла.

Управляющая переменная: obase

Значение по умолчанию: 10

obase – основание системы счисления в которой Maxima отображает целые числа.

Переменной obase можно присвоить любое целое число между 2 и 35 (десятичное), включительно. Когда obase больше десяти, цифрами являются десятичные цифры от 0 до 9 и заглавные буквы латинского алфавита A, B, C, ..., по мере необходимости. Цифры системы с основанием 35, самым большим из допустимых, включают цифры от 0 до 9 и буквы от A до Y.

См. также ibase.

Управляющая переменная: outchar

Значение по умолчанию: %o

outchar – это префикс меток для выражений, вычисленных системой Maxima. Maxima автоматически генерирует метки для каждого вычисленного выражения, соединяя outchar с linenum. Переменной outchar можно присвоить любую строку или символ, не обязательно одиночную букву.

(%i1) outchar: "output";
(output1)                           output
(%i2) expand ((a+b)^3);
                            3        2      2      3
(output2)                  b  + 3 a b  + 3 a  b + a
(%i3)

См. также labels.

Управляющая переменная: packagefile

Значение по умолчанию: false

Разработчики, которые используют save или translate, создавая пакеты (файлы) для использования другими, возможно захотят установить packagefile: true, чтобы при загрузке файла предотвратить занесение информации, кроме необходимой, в списки Maxima (такие как values, functions). В этом случае содержимое пакета будет загружено не в виде пользовательских данных. Заметим, что это не решает проблему возможного конфликта имен. Также заметим, что переменная просто указывает на то, что выводится в пакетный файл. Установка управляющей переменной в true также полезна для создания инициализационных файлов Maxima.

Управляющая переменная: pfeformat

Значение по умолчанию: false

Когда pfeformat равна true, рациональная дробь отображается при помощи косой черты (прямого слэша). Целочисленный знаменатель n отображается как множитель 1/n.

(%i1) pfeformat: false$
(%i2) 2^16/7^3;
                              65536
(%o2)                         -----
                               343
(%i3) (a+b)/8;
                              b + a
(%o3)                         -----
                                8
(%i4) pfeformat: true$ 
(%i5) 2^16/7^3;
(%o5)                       65536/343
(%i6) (a+b)/8;
(%o6)                      1/8 (b + a)
Функция: print (expr_1, ..., expr_n)

Вычисляет и отображает expr_1, ..., expr_n одно за другим, слева направо, начиная с левого края экрана консоли.

Функция print возвращает значение своего последнего аргумента. print не создает меток промежуточных выражений.

См. также display, disp, ldisplay и ldisp. Эти функции отображают по одному выражению на строку, в то время как print старается отобразить по два или больше выражений в каждой строке.

Чтобы отобразить содержимое файла, см. printfile.

(%i1) r: print ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
      radcan (log (a^10/b)))$
            3        2      2      3
(a+b)^3 is b  + 3 a b  + 3 a  b + a  log (a^10/b) is 

                                              10 log(a) - log(b) 
(%i2) r;
(%o2)                  10 log(a) - log(b)
(%i3) disp ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
      radcan (log (a^10/b)))$
                           (a+b)^3 is

                     3        2      2      3
                    b  + 3 a b  + 3 a  b + a

                         log (a^10/b) is

                       10 log(a) - log(b)
Функция: printfile (path)

Выводит файл с именем path на консоль. Значение path может быть строкой или символом. Если символ, то он преобразуется в строку.

Если файл с именем path доступен в текущей директории, то он печатается на консоли. В противном случае printfile пытается найти файл добавляя path ко всем элементам file_search_usage при помощи filename_merge.

printfile возвращает path, если файл существует, и результат успешного поиска файла.

Функция: tcl_output (list, i0, skip)
Функция: tcl_output (list, i0)
Функция: tcl_output ([list_1, ..., list_n], i)

Выводит элементы списков заключенными в фигурные скобки { }, в виде пригодном для использования в языке Tcl/Tk.

tcl_output (list, i0, skip) выводит элементы списка list с номерами i0, i0 + skip, i0 + 2 skip и так далее.

tcl_output (list, i0) равнозначна tcl_output (list, i0, 2).

tcl_output ([list_1, ..., list_n], i) выводит i-ые элементы списков list_1, ..., list_n.

Примеры:

(%i1) tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$

 {1.000000000     4.000000000     
 }
(%i2) tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$

 {2.000000000     5.000000000     
 }
(%i3) tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$

 {((RAT SIMP) 3 7) ((RAT SIMP) 11 13) 
 }
(%i4) tcl_output ([x1, y1, x2, y2, x3, y3], 2)$

 {$Y1 $Y2 $Y3 
 }
(%i5) tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$

 {SIMP 1.000000000     11.00000000     
 }
Функция: read (expr_1, ..., expr_n)

Выводит expr_1, ..., expr_n, затем считывает одно выражение с консоли и возвращает вычисленное выражение.

См. также readonly.

(%i1) foo: 42$ 
(%i2) foo: read ("foo is", foo, " -- enter new value.")$
foo is 42  -- enter new value. 
(a+b)^3;
(%i3) foo;
                                     3
(%o3)                         (b + a)
Функция: readonly (expr_1, ..., expr_n)

Выводит expr_1, ..., expr_n, затем считывает одно выражение с консоли и Возвращает его без вычисления.

(%i1) aa: 7$
(%i2) foo: readonly ("Enter an expression:");
Enter an expression: 
2^aa;
                                  aa
(%o2)                            2
(%i3) foo: read ("Enter an expression:");
Enter an expression: 
2^aa;
(%o3)                            128

См. также read.

Функция: reveal (expr, depth)

Замещает части выражения expr заданного уровня вложенности depth кратким описанием.

Если depth больше или равен максимальному уровню вложенности в выражении expr, то reveal (expr, depth) возвращает expr без изменений.

reveal вычисляет свои аргументы. reveal возвращает анализируемое выражение.

Пример:

(%i1) e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
                          2            2
                         b  - 2 a b + a
(%o1)               -------------------------
                        b + a     2 b     2 a
                    2 %e      + %e    + %e
(%i2) reveal (e, 1);
(%o2)                       Quotient
(%i3) reveal (e, 2);
                             Sum(3)
(%o3)                        ------
                             Sum(3)
(%i4) reveal (e, 3);
                     Expt + Negterm + Expt
(%o4)               ------------------------
                    Product(2) + Expt + Expt
(%i5) reveal (e, 4);
                       2                 2
                      b  - Product(3) + a
(%o5)         ------------------------------------
                         Product(2)     Product(2)
              2 Expt + %e           + %e
(%i6) reveal (e, 5);
                         2            2
                        b  - 2 a b + a
(%o6)              --------------------------
                       Sum(2)     2 b     2 a
                   2 %e       + %e    + %e
(%i7) reveal (e, 6);
                          2            2
                         b  - 2 a b + a
(%o7)               -------------------------
                        b + a     2 b     2 a
                    2 %e      + %e    + %e
Управляющая переменная: rmxchar

Значение по умолчанию: ]

Правая сторона матриц изображается символами rmxchar.

См. также lmxchar.

Функция: save (filename, name_1, name_2, name_3, ...)
Функция: save (filename, values, functions, labels, ...)
Функция: save (filename, [m, n])
Функция: save (filename, name_1=expr_1, ...)
Функция: save (filename, all)
Функция: save (filename, name_1=expr_1, name_2=expr_2, ...)

Сохраняет текущие значения аргументов name_1, name_2, name_3, ..., в filename. Аргументами являются имена переменных, функций и прочих объектов. Если имя не имеет значения или связанной с ним функцией, оно игнорируется. save возвращает filename.

save сохраняет данные в форме Lisp выражений. Данные, сохраненные функцией save, можно загрузить при помощи load (filename).

Глобальная управляющая переменная file_output_append управляет тем, будет ли информация добавлена к файлу, или файл будет переписан заново. Когда file_output_append равен true, происходит добавление, иначе save переписывает файл вывода. В обоих случаях save создает файл, если он до этого не существовал.

Особая форма save (filename, values, functions, labels, ...) сохраняет элементы перечисленные в списках values, functions, labels и т. д. Возможны любые имена определенные в infolist. values включает все определенные пользователем переменные.

Особая форма save (filename, [m, n]) сохраняет значения входных и результирующих выражений с номерами от m до n. Заметим, что m и n должны быть буквальными целыми. Входные и результирующие метки можно также записать одну за другой, например, save ("foo.1", %i42, %o42). save (filename, labels) сохраняет все входные и результирующие выражения. Сохраненные выражения при загрузке заменяют существующие.

Особая форма save (filename, name_1=expr_1, name_2=expr_2, ...) сохраняет значения expr_1, expr_2, ... с именами name_1, name_2, ... Эту форму полезно применять для входных и результирующих меток, например, save ("foo.1", aa=%o88). С правой стороны равенства в этой форме может стоять любое выражение, которое вычисляется. Эта форма не вводит новые имена в текущий сеанс Maxima, только сохраняет их в filename.

Эти особые формы и общую форму функции save можно как угодно смешивать. Например: save (filename, aa, bb, cc=42, functions, [11, 17]).

Особая форма save (filename, all) сохраняет текущее состояние Maxima, включая все определенные пользователем переменные, функции, массивы и т. д., а также элементы, заданные автоматически. Сохраняемые элементы включают в себя системные переменные, такие как file_search_maxima или showtime, если пользователь присвоил им новые значения. См. myoptions.

save вычисляет filename, все остальные аргументы не вычисляются.

Управляющая переменная: savedef

Значение по умолчанию: true

Когда savedef равно true, Maxima версия определенной пользователем функции защищается, при ее трансляции. Это позволяет отобразить ее определение при помощи dispfun и дает возможность редактировать ее.

Когда savedef равна false, имена транслируемых функций удаляются из списка functions.

Функция: show (expr)

При отображении expr, у индексированных объектов ковариантные индексы показываются как нижние, а контравариантные – как верхние. Индексы дифференцирования отображаются нижними и отделяются от ковариантных запятой.

Функция: showratvars (expr)

Возвращает список переменных в каноническом рациональном выражении expr.

См. также ratvars.

Управляющая переменная: stardisp

Значение по умолчанию: false

Когда stardisp равно true, произведение отображается со звездочкой между операндами.

Функция: string (expr)

Преобразовывает expr в линейное представление, как оно было бы введено с клавиатуры.

Значение, возвращаемое функцией string, является строкой, поэтому не может использоваться в вычислениях.

Управляющая переменная: stringdisp

Значение по умолчанию: false

Когда stringdisp равна true, строки отображаются заключенными в двойные кавычки. В противном случае кавычки опускаются.

stringdisp всегда true, при выводе определений функций.

Примеры:

(%i1) stringdisp: false$
(%i2) "This is an example string.";
(%o2)              This is an example string.
(%i3) foo () :=
      print ("This is a string in a function definition.");
(%o3) foo() := 
              print("This is a string in a function definition.")
(%i4) stringdisp: true$
(%i5) "This is an example string.";
(%o5)             "This is an example string."
Функция: stringout (filename, expr_1, expr_2, expr_3, ...)
Функция: stringout (filename, [m, n])
Функция: stringout (filename, input)
Функция: stringout (filename, functions)
Функция: stringout (filename, values)

stringout записывает выражение в файл в той же форме, в которой оно было бы введено с клавиатуры. Файл можно использовать в качестве входного для команд batch или demo, его также можно редактировать для любых целей. stringout можно выполнять во время работы writefile.

Глобальная переменная file_output_append определяет будет ли stringout добавлять или переписывать выходной файл. Если file_output_append равна true, stringout дописывает выходной файл, иначе переписывает его. В обоих случаях stringout создает файл, если тот не существовал.

Общий вид команды stringout записывает значения одного или нескольких выражений в файл. Заметим, что если выражения являются переменной, записывается только значение переменной, но не ее имя. В полезном специальном случае, выражения могут быть метками входных (%i1, %i2, %i3, ...) или результирующих (%o1, %o2, %o3, ...) выражений.

Если grind равна true, stringout форматирует выход используя формат grind. Иначе используется формат string. См. grind и string.

Особая форма stringout (filename, [m, n) записывает значения входных выражений, с номерами от m до n, включительно.

Особая форма stringout (filename, input) записывает в файл все входные выражения.

Особая форма stringout (filename, functions) записывает в файл все пользовательские функции (перечисленные в глобальном списке functions).

Особая форма stringout (filename, values) записывает в файл все пользовательские переменные (перечисленные в глобальном списке values). Каждая переменная выводится как оператор присваивания: с именем переменной, двоеточием и ее значением. Заметим, что общая форма stringout не выводит переменные в виде операторов присваивания.

Функция: tex (expr)
Функция: tex (expr, filename)
Функция: tex (expr, false)
Функция: tex (label)
Функция: tex (label, filename)
Функция: tex (label, false)

Отображает выражение в представлении подходящим для системы подготовки документов TeX. Результат – фрагмент документа, который можно скопировать в больший документ, но сам по себе он для обработки не подходит.

tex (expr) отображает TeX-представление выражения expr в консоль.

(label) отображает TeX-представление выражения, помеченное label, и назначает его метке выражения (отображаемой слева от выражения). Метки выражений TeX совпадают с метками Maxima.

tex (expr, filename) и tex (label, filename) добавляют свой TeX-вывод в файл filename.

tex (expr, false) и tex (label, false) возвращают свой вывод в виде строки.

tex вычисляет свой первый аргумент после попытки определить, не является ли он меткой. Оператор две кавычки '' вызывает вычисление аргумента, предотвращая попытки проверить, является ли он меткой.

См. также texput.

Примеры:

(%i1) integrate (1/(1+x^3), x);
                                    2 x - 1
                  2            atan(-------)
             log(x  - x + 1)        sqrt(3)    log(x + 1)
(%o1)      - --------------- + ------------- + ----------
                    6             sqrt(3)          3
(%i2) tex (%o1);
$$-{{\log \left(x^2-x+1\right)}\over{6}}+{{\arctan \left({{2\,x-1
 }\over{\sqrt{3}}}\right)}\over{\sqrt{3}}}+{{\log \left(x+1\right)
 }\over{3}}\leqno{\tt (\%o1)}$$
(%o2)                          (\%o1)
(%i3) tex (integrate (sin(x), x));
$$-\cos x$$
(%o3)                           false
(%i4) tex (%o1, "foo.tex");
(%o4)                          (\%o1)

tex (expr, false) возвращает свой вывод в виде строки.

(%i1) S : tex (x * y * z, false);
(%o1) $$x\,y\,z$$
(%i2) S;
(%o2) $$x\,y\,z$$
Функция: texput (a, s)
Функция: texput (a, s, operator_type)
Функция: texput (a, [s_1, s_2], matchfix)
Функция: texput (a, [s_1, s_2, s_3], matchfix)

Задает TeX вывод для атома a, который может быть символом или именем оператора.

texput (a, s) заставляет функцию tex в своем выводе вставлять строку s вместо a.

texput (a, s, operator_type), где operator_type можеть принимать значения prefix, infix, postfix, nary или nofix, заставляет функцию tex вставлять s вместо a и помещать вставленный текст в подходящую позицию.

texput (a, [s_1, s_2], matchfix) заставляет tex вставлять s_1 и s_2 в вывод TeX с обоих сторон аргументов атома a. Аргументы (если их несколько) разделяются запятыми.

textpput (a, [s_1, s_2, s_3], matchfix) заставляет tex в TeX-выводе вставлять s_1 и s_2 с обоих сторон аргументов атома a и разделять их аргументом s_3.

Примеры:

Определение TeX вывода переменной.

(%i1) texput (me,"\\mu_e");
(%o1)                         \mu_e
(%i2) tex (me);
$$\mu_e$$
(%o2)                         false

Определение TeX вывода обычной функции (не оператору).

(%i1) texput (lcm, "\\mathrm{lcm}");
(%o1)                     \mathrm{lcm}
(%i2) tex (lcm (a, b));
$$\mathrm{lcm}\left(a , b\right)$$
(%o2)                         false

Определение TeX вывода префиксного оператора.

(%i1) prefix ("grad");
(%o1)                         grad
(%i2) texput ("grad", " \\nabla ", prefix);
(%o2)                        \nabla 
(%i3) tex (grad f);
$$ \nabla f$$
(%o3)                         false

Определение вывода инфиксного оператора.

(%i1) infix ("~");
(%o1)                           ~
(%i2) texput ("~", " \\times ", infix);
(%o2)                        \times 
(%i3) tex (a ~ b);
$$a \times b$$
(%o3)                         false

Определение вывода постфиксного оператора.

(%i1) postfix ("##");
(%o1)                          ##
(%i2) texput ("##", "!!", postfix);
(%o2)                          !!
(%i3) tex (x ##);
$$x!!$$
(%o3)                         false

Определение вывода n-арного оператора.

(%i1) nary ("@@");
(%o1)                          @@
(%i2) texput ("@@", " \\circ ", nary);
(%o2)                         \circ 
(%i3) tex (a @@ b @@ c @@ d);
$$a \circ b \circ c \circ d$$
(%o3)                         false

Определение TeX вывода безфиксного оператора без аргументов.

(%i1) nofix ("foo");
(%o1)                          foo
(%i2) texput ("foo", "\\mathsc{foo}", nofix);
(%o2)                     \mathsc{foo}
(%i3) tex (foo);
$$\mathsc{foo}$$
(%o3)                         false

Назначение вывода матчфиксному парному оператору.

(%i1) matchfix ("<<", ">>");
(%o1)                          <<
(%i2) texput ("<<", [" \\langle ", " \\rangle "], matchfix);
(%o2)                [ \langle ,  \rangle ]
(%i3) tex (<<a>>);
$$ \langle a \rangle $$
(%o3)                         false
(%i4) tex (<<a, b>>);
$$ \langle a , b \rangle $$
(%o4)                         false
(%i5) texput ("<<", [" \\langle ", " \\rangle ", " \\, | \\,"],
      matchfix);
(%o5)           [ \langle ,  \rangle ,  \, | \,]
(%i6) tex (<<a>>);
$$ \langle a \rangle $$
(%o6)                         false
(%i7) tex (<<a, b>>);
$$ \langle a \, | \,b \rangle $$
(%o7)                         false
Функция: system (command)

Выполняет команду command как отдельный процесс. Команда отправляется на выполнение командной оболочке, заданной по умолчанию. system поддерживается не всеми операционными системами, она в основном существует в Unix и Unix-подобных окружениях.

Предположим, что _hist.out – список частот, который вы хотите изобразить в виде гистограммы при помощи программы xgraph.

(%i1) (with_stdout("_hist.out",
           for i:1 thru length(hist) do (
             print(i,hist[i]))),
       system("xgraph -bar -brw .7 -nl < _hist.out"));

Для того чтобы создать готовый график в фоновом режиме (вернуться к управлению Maxima) и удалить временный файл после завершения, сделайте так:

system("(xgraph -bar -brw .7 -nl < _hist.out;  rm -f _hist.out)&")
Управляющая переменная: ttyoff

Значение по умолчанию: false

Когда ttyoff равна true, выводимые выражения не отображаются. Выводимые выражения по прежнему вычисляются и связываются с метками. См. labels.

ttyoff не влияет на текст, отображаемый встроенными функциями, такой как сообщения об ошибках и вывод describe.

Функция: with_stdout (f, expr_1, expr_2, expr_3, ...)
Функция: with_stdout (s, expr_1, expr_2, expr_3, ...)

Вычисляет expr_1, expr_2, expr_3, ... и записывает любой сгенерированный вывод в файл f или в выходной поток s. Вычисленные выражения не записываются в вывод. Вывод может генерироваться кроме прочих функциями print, display, grind.

Глобальная переменная file_output_append управляет тем, будет ли with_stdout дописывать или переписывать заново файл f. Если file_output_append равна true, with_stdout добавляет вывод к файлу. Иначе with_stdout переписывает файл. В обоих случаях, with_stdout создает файл, если тот не существовал.

with_stdout возвращает значение своего последнего аргумента.

См. также writefile.

(%i1) with_stdout ("tmp.out", for i:5 thru 10 do
      print (i, "! yields", i!))$
(%i2) printfile ("tmp.out")$
5 ! yields 120 
6 ! yields 720 
7 ! yields 5040 
8 ! yields 40320 
9 ! yields 362880 
10 ! yields 3628800
Функция: writefile (filename)

Начинает записывать копию сессии Maxima в filename. Все взаимодействия между пользователем и Maxima записываются в этот файл точно в том виде, в котором они показываются в консоли.

Копия печатается в формате консольного вывода, который не может быть перезагружен в Maxima. Если хотите создать файл, содержащий выражения, с возможностью его загрузки, см. save и stringout. save сохраняет выражения в форме Lisp, в то время как stringout сохраняет их в форме Maxima.

Результат выполнения writefile, когда filename уже существует, зависит от реализации лежащего в основе Lisp. Выходной файл может быть стерт или дописан. appendfile всегда дописывает файл.

Может оказаться удобным выполнить playback после writefile чтобы сохранить отображение предыдущих взаимодействий. Так playback отображает только входные или результирующие переменные (%i1, %o1 и т. д.), любой вывод, создаваемый печатающими выражениями в функциях (в противоположность возвращаемому значению), не отображается функцией playback.

closefile закрывает файл, который открыла writefile или appendfile.


Previous: Файлы, Up: Ввод и вывод   [Contents][Index]