4 @c OriginalRevision=1.66
5 @c TranslatedBy: (c) 2008-02 Sergei Shmakov <chivorotkiv@omich.net>
10 * Функции и переменные для ввода и вывода::
13 @node Комментарии, Файлы, Ввод и вывод, Ввод и вывод
16 В Maxima любой текст, расположенный между @code{/*} и @code{*/}, является комментарием.
18 Анализатор Maxima обрабатывает комментарии как пробелы, чтобы проще было различать лексемы
19 во входном потоке, комментарий всегда завершает лексему.
20 Следующий ввод @code{a/* foo */b} содержит две лексемы @code{a} и @code{b}, а не
22 Во всех остальных случаях комментарии игнорируются, что бы в них ни находилось.
24 Комментарии могут иметь сколько угодно уровней вложенности. Разделители
25 @code{/*} и @code{*/} образуют соответствующие пары. Количество открывающих
26 разделителей @code{/*} должно быть равно количеству закрывающих @code{*/}.
31 @c /* aa is a variable of interest */ aa : 1234;
32 @c /* Value of bb depends on aa */ bb : aa^2;
33 @c /* User-defined infix operator */ infix ("b");
34 @c /* Parses same as a b c, not abc */ a/* foo */b/* bar */c;
35 @c /* Comments /* can be nested /* to any depth */ */ */ 1 + xyz;
38 (%i1) /* aa is a variable of interest */ aa : 1234;
40 (%i2) /* Value of bb depends on aa */ bb : aa^2;
42 (%i3) /* User-defined infix operator */ infix ("b");
44 (%i4) /* Parses same as a b c, not abc */ a/* foo */b/* bar */c;
46 (%i5) /* Comments /* can be nested /* to any depth */ */ */ 1 + xyz;
50 @opencatbox{Категории:}
54 @node Файлы, Функции и переменные для ввода и вывода, Комментарии, Ввод и вывод
56 Файл -- это область на определенном запоминающем устройстве, содержащая данные или текст.
57 Файлы на дисках как-бы группируются в "директории", которые являются просто списками файлов.
58 Для работы с файлами существуют следующие команды:
71 @node Функции и переменные для ввода и вывода, , Файлы, Ввод и вывод
72 @section Функции и переменные для ввода и вывода
74 @defvr {Системная переменная} __
76 @vrindex Текущее входное выражение.
78 @code{__} - введенное выражение, обрабатываемое в данный момент.
79 То есть, пока вычисляется @var{expr}, @code{__} равно @var{expr}.
81 Введенное выражение присваивается переменной @code{__} до упрощения или вычисления.
82 Однако, значение @code{__} упрощается (но не вычисляется) во время вывода.
84 @code{__} распознается функциями @code{batch} и @code{load}.
85 В файле, обрабатываемом с помощью @code{batch}, @code{__} означает то же самое,
86 что и в режиме диалога. Когда файл обрабатывается функцией @code{load}, @code{__}
87 имеет значения последнего, введенного в режиме диалога или пакетном файле, выражения.
88 @code{__} не принимает значения выражений, которые вводятся в обрабатываемом файле.
89 В частности, если @code{load (@var{filename})} вызывается в режиме диалога,
90 то во время выполнения файла @code{__} имеет значение @code{load(@var{filename})}.
92 См. также @code{_} и @code{%}.
97 @c print ("I was called as", __);
99 @c g (x) := (print ("Current input expression =", __), 0);
100 @c [aa : 1, bb : 2, cc : 3];
101 @c (aa + bb + cc)/(dd + ee + g(x));
104 (%i1) print ("I was called as", __);
105 I was called as print(I was called as, __)
106 (%o1) print(I was called as, __)
109 (%i3) g (x) := (print ("Current input expression =", __), 0);
110 (%o3) g(x) := (print("Current input expression =", __), 0)
111 (%i4) [aa : 1, bb : 2, cc : 3];
113 (%i5) (aa + bb + cc)/(dd + ee + g(x));
115 Current input expression = --------------
122 @opencatbox{Категории:}
123 @category{Глобальные переменные}
128 @defvr {Системная переменная} _
130 @vrindex Предыдущий ввод
133 @code{_} - самое последнее из введенных выражений (таких как @code{%i1}, @code{%i2}, @code{%i3}, ...).
135 Введенное выражение присваивается переменной @code{_} до упрощения или вычисления.
136 Однако, это значение упрощается (но не вычисляется) во время вывода.
138 @code{_} обрабатывается функциями @code{batch} и @code{load}.
139 Во время обработки файла функцией @code{batch} переменная @code{_} означает то же, что и в
141 Когда файл обрабатывается функцией @code{load}, значение переменной @code{_} принимает
142 последнее вычисленное выражение, которое было введено в диалоговом режиме или пакетном файле.
143 Выражения, вводимые в обрабатываемом файле, не присваиваются переменной @code{_}.
145 См. также @code{__} и @code{%}.
174 ((%SIN) ((MQUOTIENT) $%PI 2))
191 @opencatbox{Категории:}
192 @category{Работа в консоли}
193 @category{Глобальные переменные}
198 @defvr {Системная переменная} %
200 @vrindex Предыдущий выход
202 @code{%} - вывод (@code{%o1}, @code{%o2}, @code{o3}, ...) последнего обработанного
203 выражения, даже если он не выводится.
205 @code{%} обрабатывается командами @code{batch} и @code{load}.
206 В файле, обрабатываемом командой @code{batch}, @code{%} имеет то же значение, что и
207 в режиме диалога. В файле, обрабатываемого командой @code{load}, Значение @code{%} принимает
208 вывод последнего обработанного в диалоговом режиме выражения. Переменной @code{%} не присваивается
209 вывод выражений обрабатываемого файла.
211 См. также @code{_}, @code{%%} и @code{%th}.
213 @opencatbox{Категории:}
214 @category{Работа в консоли}
215 @category{Глобальные переменные}
220 @defvr {Системная переменная} %%
222 @vrindex Предыдущий результат в составном выражении
224 В составных выражениях таких как @code{block}, @code{lambda}, или @code{(@var{s_1}, ..., @var{s_n})},
225 @code{%%} - значение предыдущего утверждения. К примеру выражения,
228 block (integrate (x^5, x), ev (%%, x=2) - ev (%%, x=1));
229 block ([prev], prev: integrate (x^5, x),
230 ev (prev, x=2) - ev (prev, x=1));
233 дадут один и тот же результат, то есть @code{21/2}.
235 Составное выражение может быть частью другого составного выражения. И в случае простого утверждения,
236 и в случае, когда утверждение является составным выражением, @code{%%} принимает значение предыдущего утверждения.
240 block (block (a^n, %%*42), %%/6)
245 Внутри составного утверждения, значение @code{%%} можно проверить в диалоге
246 команды @code{break}. К примеру, следующее выражение
249 block (a: 42, break ())$
252 открывает диалог, в котором результатом ввода @code{%%;} будет @code{42}.
254 В первом утверждении составного выражения или вне составного выражения
255 переменная @code{%%} не определена.
257 Переменная @code{%%} распознается функциями @code{batch} и @code{load},
258 и имеет то же значение, что и в режиме диалога.
262 @opencatbox{Категории:}
263 @category{Глобальные переменные}
268 @defvr {Управляющая переменная} %edispflag
269 Значение по умолчанию: @code{false}
271 Когда @code{%edispflag} установлена равной @code{true}, Maxima отображает @code{%e} отрицательной
272 степени. К примеру, @code{%e^-x} отображается как @code{1/%e^x}.
273 @c тут бы я добавил "см. также exptdispflag", но в оригинале нету.
275 @opencatbox{Категории:}
276 @category{Экспоненциальные и логарифмические функции}
277 @category{Флаги переменные вывода}
282 @deffn {Функция} %th (@var{i})
284 @fnindex N-ный по счету предыдущий вывод
286 Значение @var{i}-го предыдущего вывода. То есть, если следующим вычисленным выражением
287 будет вывод с номером @var{n}, то @code{%th (@var{m})} примет значение вывода с номером (@var{n} - @var{m}).
289 @code{%th} полезна в пакетных @code{batch}-файлах или в ссылках на группу выведенных выражений.
293 block (s: 0, for i:1 thru 10 do s: s + %th (i))$
296 присвоит переменной @code{s} сумму последних десяти выведенных выражений.
298 @code{%th} обрабатывается функциями @code{batch} и @code{load}.
299 В файле, обрабатываемом функцией @code{batch}, @code{%th} означает то же,
300 что и в режиме диалога. В файле, обрабатываемом командой @code{load},
301 @code{%th} ссылается на выведенные выражения, которые были вычислены последними в режиме диалога
302 или пакетном файле. @code{%th} не ссылается на выражения, выводимые в процессе работы @code{load}.
306 @opencatbox{Категории:}
307 @category{Работа в консоли}
312 @deffn {Специальный символ} ?
314 @fnindex Вызов документации
316 Стоящий перед именем функции или переменной символ @code{?} означает что
317 это имя функции или переменной из Lisp, а не из Maxima.
318 К примеру, @code{?round} означает Lisp-функцию @code{ROUND}.
319 См. дополнительно @ref{Lisp и Maxima}.
321 Запись @code{? word} (вопросительный знак и следующее за ним слово разделены пробелом)
322 эквивалентна записи @code{describe("word")}.
323 Вопросительный знак должен находиться в начале строки ввода, иначе он не определится
324 как запрос на документацию.
326 @opencatbox{Категории:}
328 @category{Работа в консоли}
333 @deffn {Специальный символ} ??
335 @fnindex Вызов документации (неточный поиск)
338 Запись @code{?? word} (@code{??} и следующее за ним слово разделяются символом пробела)
339 эквивалентна записи @code{descrive("word", inexact)}.
341 @opencatbox{Категории:}
347 @defvr {Управляющая переменная} absboxchar
348 Значение по умолчанию: @code{!}
350 Символ @code{absboxchar} используется для изображения знака модуля вокруг,
351 выражений, занимающих по высоте больше одной строчки.
353 @opencatbox{Категории:}
354 @category{Флаги и переменные вывода}
359 @defvr {Управляющая переменная} file_output_append
360 Значение по умолчанию: @code{false}
362 @code{file_output_append} управляет тем, будет ли вывод в функции добавляться в конец
363 или замещать содержимое выводимого файла.
364 Когда @code{file_output_append} равна @code{true}, такие функции добавляют вывод к файлу,
365 иначе выводимый файл переписывается заново.
367 Функции @code{save}, @code{strungout} и @code{with_stdout} учитывают @code{file_output_append}.
368 Остальные функции, которые записываю выход во внешние файлы, не учитывают @code{file_output_append}.
369 В частности, графические и транслирующие функции всегда замещает содержимое выводимого файла, а
370 @code{tex} и @code{strungout} всегда дописываю в конец.
371 @c WHAT ABOUT WRITEFILE ??
373 @opencatbox{Категории:}
374 @category{Вывод файлов}
375 @category{Глобальные флаги}
380 @deffn {Функция} appendfile (@var{filename})
381 Добавляет копию консольного вывода в @var{filename}.
382 @code{appendfile} работает так же как и @code{writefile},
383 но отличие в том, что если файл существует, он всегда дописывается.
385 @code{closefile} закрывает трансляцию в файл открытый функциями @code{appendfile} или @code{writefile}.
387 @opencatbox{Категории:}
388 @category{Вывод файлов}
389 @category{Работа в консоли}
394 @c batch CAN TAKE 'test AS AN OPTIONAL ARGUMENT IN WHICH CASE IT CALLS test-batch
395 @c (SAME AS run_testsuite) -- SHOULD DOCUMENT batch (file, 'test)
396 @c FIX BUG WHICH CAUSES batch (<file>, 'test) TO FAIL, THEN DOCUMENT IT HERE
397 @deffn {Функция} batch (@var{filename})
398 Считывает выражения Maxima из @var{filename}, и обрабатывает их.
399 @code{batch} ищет @var{filename} в директориях списка @code{file_search_maxima}.
400 См. @code{file_search}.
402 @var{filename} содержит последовательность выражений Maxima,
403 завершающихся символами @code{;} или @code{$}.
404 Специальные переменная @code{%} и функция @code{%th}
405 ссылаются на предыдущие результаты внутри файла.
406 Файл может включать конструкции @code{:lisp}.
407 Символы пробела, табуляции и новой строки в файле игнорируются.
408 Подходящий входной файл может быть создан при помощи текстового редактора или
409 функцией @code{stringout}.
411 @code{batch} считывает каждое входящее выражение из @var{filename},
412 отображает его ввод в консоли,
413 вычисляет соответствующее выходящее выражение
415 Входящим выражениям присваиваются входные метки, а выходящим -- выходные.
416 @code{batch} вычисляет все входящие выражения файла до тех пор пока в них не
418 Если запрашивается пользовательский ввод (к примеру, командами @code{asksign} или @code{askinteger}),
419 выполнение @code{batch} останавливается для сбора требуемого ввода и затем продолжается.
421 Возможна остановка @code{batch} нажатием @code{control-C} в консоли.
422 Эффект нажатия @code{control-C} зависит от реализации лежащего в основе Lisp.
424 @code{batch} может использоваться в различных целях.
425 Для хранения рабочих командных строк, дающих возможность проводить демонстрации без ошибок,
426 или может помочь организовать работу над решением сложных задач.
428 @code{batch} вычисляет свой аргумент.
429 @c LACK OF A RETURN VALUE IS A BUG; THE INTENT IS TO RETURN THE FILE PATH, TO JUDGE BY THE SOURCE CODE
430 @code{batch} не возвращает значений.
432 См. также @code{load}, @code{batchload} и @code{demo}.
434 @opencatbox{Категории:}
435 @category{Управление сессией}
436 @category{Ввод файлов}
441 @deffn {Функция} batchload (@var{filename})
442 Считывает выражения Maxima из @var{filename} и вычисляет их,
443 не отображая входные и выходные выражения и не присваивая ссылок
445 Однако, печатаемый вывод (такой, какой производят команды @code{print} или @code{describe})
448 Специальная переменная @code{%} и функция @code{%th}
449 ссылается на предыдущие результаты из режима диалога, но не на результаты
451 Файл не может включать конструкции @code{:lisp}.
453 @code{batchload} возвращает путь к @var{filename} в виде строки.
454 @code{batchload} вычисляет свой аргумент.
456 См. также @code{batch} и @code{load}.
458 @opencatbox{Категории:}
459 @category{Управление сессией}
460 @category{Ввод файлов}
465 @deffn {Функция} closefile ()
466 Закрывает запись в файл, открытую командой @code{writefile} или @code{appendfile}.
468 @opencatbox{Категории:}
469 @category{Вывод файлов}
470 @category{Работа в консоли}
475 @c NEEDS CLARIFICATION !!!
476 @deffn {Функция} collapse (@var{expr})
477 Сворачивает выражение @var{expr} делая все его общие (т.е. равные)
478 ссылающимися на одни ячейки памяти, тем самым сохраняя память.
479 Функция (@code{collapse} используется командой @code{optimize}.
480 Таким образом, вызов @code{collapse} может быть полезным до выгрузки в @code{save} файл.
481 Можно свернуть несколько выражений вместе используя команду
482 @code{collapse ([@var{expr_1}, ..., @var{expr_n}])}.
483 Аналогично, можно свернуть элементы массива @code{A}
484 при помощи команды @code{collapse (listarray ('A))}.
486 @opencatbox{Категории:}
491 @deffn {Функция} concat (@var{arg_1}, @var{arg_2}, ...)
492 Сцепляет свои аргументы. Аргументы должны быть атомами.
493 Возвращаемое значение является символом, если первый аргумент -- символ, и строкой
496 @code{concat} вычисляет свои аргументы.
497 Одиночная кавычка @code{'} предотвращает вычисление.
502 (%i3) concat (y, z/2);
504 (%i4) concat ('y, z/2);
508 Символу, полученному с помощью @code{concat}, можно присваивать значения
509 и использовать его в выражениях.
510 @code{::} (двойное двоеточие) -- оператор присваивания, который вычисляет свой левый операнд.
513 (%i5) a: concat ('y, z/2);
527 Заметьте, что несмотря на то, что @code{concat (1, 2)} выглядит как число, результат является строкой.
530 (%i10) concat (1, 2) + 3;
534 @opencatbox{Категории:}
541 @deffn {Функция} sconcat (@var{arg_1}, @var{arg_2}, ...)
543 Сцепляет аргументы в строки. В отличии от @code{concat}, аргументы не обязаны
547 (%i1) sconcat ("xx[", 3, "]:", expand ((x+y)^3));
548 (%o1) xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
551 @opencatbox{Категории:}
558 @c AFTER REVIEWING src/displa.lisp, IT LOOKS LIKE THIS VARIABLE HAS NO EFFECT
559 @c CUT IT ON THE NEXT PASS
560 @c @defvar cursordisp
561 @c Default value: @code{true}
563 @c When @code{cursordisp} is @code{true}, expressions are drawn by
564 @c the displayer in logical sequence. This only works with a console
565 @c which can do cursor movement. If @code{false}, expressions are
566 @c printed line by line.
568 @c @code{cursordisp} is always @code{false} when a @code{writefile} is in
573 @deffn {Функция} disp (@var{expr_1}, @var{expr_2}, ...)
574 то же что и @code{display}, но отличается тем что значение аргументов отображаются
575 без выражений. Это полезно для сложных аргументов, у которых нет имени или
576 в случае, когда интерес представляет только значение без имени.
578 @opencatbox{Категории:}
579 @category{Функции вывода}
584 @deffn {Функция} dispcon (@var{tensor_1}, @var{tensor_2}, ...)
585 @deffnx {Функция} dispcon (all)
586 Отображает ограничения аргументов, наложенные на них командой @code{defcon}.
587 @code{dispcon (all)} отображает все ограничения, которые были заданы.
589 @opencatbox{Категории:}
590 @category{Функции вывода}
595 @deffn {Функция} display (@var{expr_1}, @var{expr_2}, ...)
596 Отображает равенства, выравненные по центру. Левыми частями равенств являются не вычисленные
597 выражения @var{expr_i}, a правыми -- их значения.
598 Эта функция полезна в блоках и конструкциях @code{for} для вывода промежуточных результатов.
599 Аргументы @code{display} обычно являются атомами, переменными с индексом, или
600 вызовами функций. См. также @code{disp}.
603 (%i1) display(B[1,2]);
610 @opencatbox{Категории:}
611 @category{Функции вывода}
616 @defvr {Управляющая переменная} display2d
617 Значение по умолчанию: @code{true}
619 Когда @code{display2d} равна @code{false}, консольный вывод производится в строковой (одномерной) форме,
620 а не в наглядной (двумерной).
622 @opencatbox{Категории:}
623 @category{Флаги и переменные вывода}
628 @defvr {Управляющая переменная} display_format_internal
629 Значение по умолчанию: @code{false}
631 Когда @code{display_format_internal} равна @code{true},
632 выражения отображаются без преобразования, которое "прячет"
633 внутреннее математическое представление.
634 Тогда вывод соответствует результату функции @code{inpart}, а не @code{part}.
640 a-b; a - b a + (- 1) b
653 @opencatbox{Категории:}
654 @category{Флаги и переменные вывода}
659 @c IS THIS FUNCTION STILL USEFUL ???
660 @c REPHRASE, NEEDS EXAMPLES
661 @deffn {Функция} dispterms (@var{expr})
662 Выводит друг под другом части @var{expr}.
663 Первым отображается оператор выражения @var{expr}, затем каждое слагаемое суммы, множители
664 произведения или части более общего выражения отображаются отдельно. Это полезно,
665 когда @var{expr} слишком большое для иных способов отображения. К примеру, если
666 @code{P1}, @code{P2}, ... -- очень большие выражения, то программе может не хватить
667 памяти при попытке отобразить @code{P1 + P2 + ...} как единое целое.
668 Однако, @code{dispterms (P1 + P2 + ...)} отображает @code{P1}, затем ниже @code{P2} и т. д.
669 Если не использовать @code{dispterms}, когда показательное выражение
670 слишком широко, для отображения в виде @code{A^B}, то оно выводится в виде @code{expt (A, B)}
671 (или @code{ncexpt (A, B)} в случае @code{A^^B}).
672 @c !!! кстати, у меня оно не в таком виде появляется, а в @code{expt(A,<B>)}
674 @opencatbox{Категории:}
675 @category{Функции вывода}
680 @defvr {Управляющая переменная} error_size
681 Значение по умолчанию: 10
683 @code{error_size} изменяет сообщения об ошибках, в зависимости от размера выражения, которое появляется в нем.
684 Если размер выражения (определенный с помощью Lisp-функции @code{ERROR-SIZE})
685 больше чем @code{error_size}, выражение замещается символом, а символу присваивается
686 выражение. Символы берутся из списка @code{error_syms}.
688 В противном случае, когда выражение меньше чем @code{error_size}, оно и выводится
691 См. также @code{error} и @code{error_syms}.
694 @c OUTPUT GENERATED BY THE FOLLOWING
695 @c U: (C^D^E + B + A)/(cos(X-1) + 1)$
697 @c error ("Example expression is", U);
700 @c error ("Example expression is", U);
702 @code{ERROR-SIZE} задает размер @code{U} равным 24.
705 (%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$
707 (%i2) error_size: 20$
709 (%i3) error ("Example expression is", U);
711 Example expression is errexp1
712 -- an error. Quitting. To debug this try debugmode(true);
719 (%i5) error_size: 30$
721 (%i6) error ("Example expression is", U);
726 Example expression is --------------
728 -- an error. Quitting. To debug this try debugmode(true);
731 @opencatbox{Категории:}
732 @category{Флаги и переменные вывода}
738 @defvr {Управляющая переменная} error_syms
739 Значение по умолчанию: @code{[errexp1, errexp2, errexp3]}
741 В сообщениях об ошибках, выражения большие чем @code{error_size} заменяются символами
742 и присваиваются этим символам. Символы берутся из списка @code{error_syms}.
743 Первое слишком большое выражения заменяется символом @code{error_syms[1]},
744 второе символом @code{error_syms[2]} и так далее.
746 Если слишком больших выражений больше чем элементов в @code{error_syms},
747 то символы генерируются автоматически, @code{n}-ный символ равен @code{concat ('errexp, @var{n})}.
749 См. также @code{error} и @code{error_size}.
751 @opencatbox{Категории:}
752 @category{Флаги и переменные вывода}
758 @deffn {Функция} expt (@var{a}, @var{b})
759 Если показательное выражение слишком широко для отображения в виде @code{@var{a}^@var{b}}),
760 оно выводится в виде @code{expt (@var{a}, @var{b})} (или @code{ncexpt (@var{a}, @var{b})}
761 в случае @code{@var{a}^^@var{b}}).
763 @code{expt} и @code{ncexpt} не распознаются при вводе.
767 @defvr {Управляющая переменная} exptdispflag
768 Значение по умолчанию: @code{true}
770 Когда @code{exptdispflag} равна @code{true}, Maxima отображает выражения
771 с отрицательными степенями в виде дробей, например @code{X^(-1)} в виде @code{1/X}.
773 @opencatbox{Категории:}
774 @category{Флаги и переменные вывода}
780 @deffn {Функция} filename_merge (@var{path}, @var{filename})
781 Составляет путь из @var{path} и @var{filename}. Если последняя часть пути @var{path}
782 имеет форму @code{###.@var{something}}, эта часть заменяется на @code{@var{filename}.@var{something}}.
783 В противном случае последняя часть заменяется на @var{filename}.
785 Результатом является объект пути Lisp.
787 @opencatbox{Категории:}
788 @category{Ввод файлов}
789 @category{Вывод файлов}
794 @deffn {Функция} file_search (@var{filename})
795 @deffnx {Функция} file_search (@var{filename}, @var{pathlist})
797 @code{file_search} ищет файл @var{filename} и возвращает путь к этому файлу (в виде строки),
798 если может его найти, иначе возвращает @code{false}.
799 @code{file_search (@var{filename})} ищет в определенных по умолчанию каталогах для поиска, которые
800 указаны в переменных @code{file_search_maxima}, @code{file_search_lisp} и @code{file_search_demo}.
802 Перед попыткой сопоставить имя с шаблонами поиска файлов.
803 @code{file_search} первым делом проверяет существование искомого файла.
804 См. @code{file_search_maxima} о шаблонах поиска файла.
806 Аргумент @var{filename} может быть как путем с именем, так и просто именем файла.
807 Если каталог включен в пути поиска вместе с поисковым шаблоном файла,
808 то @var{filename} может быть именем без расширения.
812 file_search ("/home/wfs/special/zeta.mac");
813 file_search ("zeta.mac");
814 file_search ("zeta");
817 будет найден один и тот же файл, если он существует и @code{/home/wfs/special/###.mac} включен
818 в @code{file_search_maxima}.
820 @code{file_search (@var{filename}, @var{pathlist})} осуществляет поиск в каталогах,
821 заданных переменной @var{pathlist}, которая представляет из себя список строк.
822 Аргумент @var{pathlist} замещает каталоги поиска, определенные по умолчанию, так если дан список путей,
823 @code{file_search} ищет только в заданных там и не ищет в путях по умолчанию.
824 Даже если @var{pathlist} содержит только один каталог, @var{pathlist} должен быть задан, как список из одного
827 Пользователь может изменять пути, определенные по умолчанию. См. @code{file_search_maxima}.
829 @code{file_search} используется функцией @code{load}, шаблоны поиска файлов берутся
830 из @code{file_search_maxima} и @code{file_search_lisp}.
832 @opencatbox{Категории:}
833 @category{Ввод файлов}
838 @defvr {Управляющая переменная} file_search_maxima
839 @defvrx {Управляющая переменная} file_search_lisp
840 @defvrx {Управляющая переменная} file_search_demo
841 Эти переменные задают списки каталогов, в которых производят поиск функции
842 @code{load}, @code{demo} и некоторые другие функции Maxima.
843 По умолчанию в них заданы различные каталоги из путей установки Maxima.
845 Пользователь может изменить эти переменные, удалить значения по умолчанию или
846 добавить дополнительные каталоги.
850 file_search_maxima: ["/usr/local/foo/###.mac",
851 "/usr/local/bar/###.mac"]$
854 удаляет начальные директории списка @code{file_search_maxima},
858 file_search_maxima: append (file_search_maxima,
859 ["/usr/local/foo/###.mac", "/usr/local/bar/###.mac"])$
862 добавляет две дополнительные директории.
863 Иногда удобно разместить такие выражения в файле @code{maxima-init.mac},
864 чтобы путь поиска файла назначался автоматически при запуске Maxima.
866 При помощи шаблонов поиска файлов можно определить несколько расширений файлов и несколько путей.
867 Строка @code{###} заменяется запрашиваемым именем,
868 в то время как список разделенных запятыми имен, заключенный в фигурные скобки, @code{@{foo,bar,baz@}}
869 раскрывается в множество строк.
870 В качестве примера предположим, что искомое имя -- @code{neumann}, тогда
873 "/home/@{wfs,gcj@}/###.@{lisp,mac@}"
876 раскроется в @code{/home/wfs/neumann.lisp}, @code{/home/gcj/neumann.lisp}, @code{/home/wfs/neumann.mac} и
877 @code{/home/gcj/neumann.mac}.
879 @opencatbox{Категории:}
880 @category{Ввод файлов}
881 @category{Глобальные переменные}
886 @deffn {Функция} file_type (@var{filename})
887 Возвращает предположение о содержимом @var{filename}, на основе
888 его расширения. @var{filename} не должен ссылаться на существующий файл,
889 не происходит попыток открыть файл и проверить содержимое.
891 Возвращаемое значение является одним из символов: @code{object}, @code{lisp} или @code{maxima}.
892 Если расширение начинается на @code{m} или @code{d}, @code{file_type} возвращается @code{maxima}.
893 Если расширение начинается на @code{l}, @code{file_type} возвращается @code{lisp}.
894 Если ни один из перечисленных вариантов, то @code{file_type} возвращается @code{object}.
896 @opencatbox{Категории:}
897 @category{Ввод файлов}
902 @deffn {Функция} grind (@var{expr})
903 @deffnx {Управляющая переменная} grind
904 Функция @code{grind} выводит @var{expr} в консоль в форме
905 подходящем для ввода в Maxima. @code{grind} всегда возвращает @code{done}.
907 Когда @var{expr} является именем функции или макрокоманды, @code{grind} печатает
908 определение функции или макрокоманды вместо просто имени.
910 См. также @code{string}, которая возвращает строку, а не печатает вывод.
911 @code{grind} пытается печатать выражение способом, который делает его проще
912 для чтения, чем вывод команды @code{string}.
914 Когда переменная @code{grind} равна @code{true}, вывод @code{string} и @code{stringout}
915 имеет тот же вид, что и вывод @code{grind}.
916 В противном случае специального форматирования вывода этих функций не производится.
917 По умолчанию значение переменной @code{grind} равно @code{false}.
919 @code{grind} может так же быть задана как аргумент @code{playback}.
920 Когда @code{grind} задана, @code{playback} печатает входное выражение в таком же
921 виде как функция @code{grind}.
922 В противном случае специального форматирования вывода не производится.
924 @code{grind} вычисляет свой аргумент.
931 @c [aa, 1729, aa + 1729];
933 @c matrix ([aa, 17], [29, bb]);
935 @c set (aa, 17, 29, bb);
937 @c exp (aa / (bb + 17)^29);
939 @c expr: expand ((aa + bb)^10);
942 @c cholesky (A):= block ([n : length (A), L : copymatrix (A),
943 @c p : makelist (0, i, 1, length (A))],
944 @c for i thru n do for j : i thru n do
945 @c (x : L[i, j], x : x - sum (L[j, k] * L[i, k], k, 1, i - 1),
946 @c if i = j then @c p[i] : 1 / sqrt(x) else L[j, i] : x * p[i]),
947 @c for i thru n do L[i, i] : 1 / p[i],
948 @c for i thru n do for j : i + 1 thru n do L[i, j] : 0, L)$
950 @c string (fundef (cholesky));
958 (%i3) [aa, 1729, aa + 1729];
959 (%o3) [aa, 1729, aa + 1729]
963 (%i5) matrix ([aa, 17], [29, bb]);
968 matrix([aa,17],[29,bb])$
970 (%i7) set (aa, 17, 29, bb);
971 (%o7) @{17, 29, aa, bb@}
975 (%i9) exp (aa / (bb + 17)^29);
984 (%i11) expr: expand ((aa + bb)^10);
986 (%o11) bb + 10 aa bb + 45 aa bb + 120 aa bb + 210 aa bb
988 + 252 aa bb + 210 aa bb + 120 aa bb + 45 aa bb
992 bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6
993 +252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2
996 (%i13) string (expr);
997 (%o13) bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6\
998 +252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2+10*aa^9*\
1000 (%i14) cholesky (A):= block ([n : length (A), L : copymatrix (A),
1001 p : makelist (0, i, 1, length (A))], for i thru n do
1003 (x : L[i, j], x : x - sum (L[j, k] * L[i, k], k, 1, i - 1),
1004 if i = j then p[i] : 1 / sqrt(x) else L[j, i] : x * p[i]),
1005 for i thru n do L[i, i] : 1 / p[i],
1006 for i thru n do for j : i + 1 thru n do L[i, j] : 0, L)$
1007 (%i15) grind (cholesky);
1009 [n:length(A),L:copymatrix(A),
1010 p:makelist(0,i,1,length(A))],
1012 (for j from i thru n do
1013 (x:L[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),
1014 if i = j then p[i]:1/sqrt(x)
1015 else L[j,i]:x*p[i])),
1016 for i thru n do L[i,i]:1/p[i],
1017 for i thru n do (for j from i+1 thru n do L[i,j]:0),L)$
1019 (%i16) string (fundef (cholesky));
1020 (%o16) cholesky(A):=block([n:length(A),L:copymatrix(A),p:makelis\
1021 t(0,i,1,length(A))],for i thru n do (for j from i thru n do (x:L\
1022 [i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),if i = j then p[i]:1/sqrt(x\
1023 ) else L[j,i]:x*p[i])),for i thru n do L[i,i]:1/p[i],for i thru \
1024 n do (for j from i+1 thru n do L[i,j]:0),L)
1027 @opencatbox{Категории:}
1028 @category{Флаги и переменные вывода}
1029 @category{Функции вывода}
1034 @c !!! Это работает?
1035 @defvr {Управляющая переменная} ibase
1036 Значение по умолчанию: 10
1038 Целые вводимые в Maxima распознаются с учетом основания системы счисления @code{ibase}.
1040 Переменной @code{ibase} может быть присвоено значение между 2 и 35 (в десятичной), включительно.
1041 Когда @code{ibase} больше чем 10, в состав цифр входят десятичные цифры от 0 до 9
1042 и заглавные буквы алфавита A, B, C, ..., по мере необходимости.
1044 Цифры для основания 35, наибольшего возможного, включают цифры от 0 до 9 и буквы от A до Z.
1047 См. также @code{obase}.
1049 @c NEED EXAMPLES HERE
1050 @opencatbox{Категории:}
1051 @category{Работа в консоли}
1056 @defvr {Управляющая переменная} inchar
1057 Значение по умолчанию: @code{%i}
1059 @code{inchar} -- префикс перед метками выражений, вводимых пользователем.
1060 Maxima автоматически генерирует ссылку для каждого входного выражения,
1061 соединяя @code{inchar} и @code{linenum}.
1062 Переменной @code{inchar} может быть присвоена любая строка или обозначение, не обязательно
1063 состоящее из одной буквы.
1066 (%i1) inchar: "input";
1068 (input1) expand ((a+b)^3);
1070 (%o1) b + 3 a b + 3 a b + a
1074 См. также @code{labels}.
1076 @opencatbox{Категории:}
1077 @category{Флаги и переменные вывода}
1082 @deffn {Функция} ldisp (@var{expr_1}, ..., @var{expr_n})
1083 Отображает выражения @var{expr_1}, ..., @var{expr_n} в консоли как в печатном выводе.
1084 @code{ldisp} присваивает метки промежуточных выражений для каждого аргумента
1085 и возвращает список меток.
1087 См. также @code{disp}.
1093 (%i2) f: expand (e);
1095 (%o2) b + 3 a b + 3 a b + a
1101 (%t4) b + 3 a b + 3 a b + a
1109 (%o5) b + 3 a b + 3 a b + a
1112 @opencatbox{Категории:}
1113 @category{Функции вывода}
1118 @deffn {Функция} ldisplay (@var{expr_1}, ..., @var{expr_n})
1119 Отображает выражения @var{expr_1}, ..., @var{expr_n} в консоли как при выводе.
1120 Каждое выражение печатается в виде равенства @code{lhs = rhs},
1121 в котором @code{lhs} -- один из аргументов функции @code{ldisplay},
1122 а @code{rhs} -- его значение.
1123 Обычно каждый аргумент -- переменная.
1124 @code{ldisp} присваивает метки промежуточных выражений каждому равенству
1125 и возвращает список меток.
1127 См. также @code{display}.
1133 (%i2) f: expand (e);
1135 (%o2) b + 3 a b + 3 a b + a
1136 (%i3) ldisplay (e, f);
1141 (%t4) f = b + 3 a b + 3 a b + a
1149 (%o5) f = b + 3 a b + 3 a b + a
1152 @opencatbox{Категории:}
1153 @category{Функции вывода}
1158 @defvr {Управляющая переменная} linechar
1159 Значение по умолчанию: @code{%t}
1161 @code{linechar} -- префикс меток промежуточных выражений, генерируемых Maxima.
1162 Maxima генерирует метки для каждого промежуточного выражения (если оно отображается),
1163 соединяя @code{linechar} и @code{linenum}.
1164 Переменной @code{linechar} может быть присвоена любая строка или символ, не обязательно
1167 Промежуточный выражения могут отображаться, а могут и не отображаться.
1168 См. @code{programmode} и @code{labels}.
1170 @opencatbox{Категории:}
1171 @category{Флаги и переменные вывода}
1176 @defvr {Управляющая переменная} linel
1177 Значение по умолчанию: 79
1179 @code{linel} -- ширина консоли (в символах) для вывода выражений.
1180 @c лучше не придумал, или недопонял.
1181 Пользователь может задать любое значение @code{linel}, хотя очень маленькие или
1182 очень большие значения могут оказаться неудобными.
1183 Текст выводимый встроенными функциями Maxima, такой как сообщения об ошибках и вывод @code{describe},
1184 не зависит от @code{linel}.
1186 @opencatbox{Категории:}
1187 @category{Флаги и переменные вывода}
1192 @defvr {Управляющая переменная} lispdisp
1193 Значение по умолчанию: @code{false}
1195 Когда @code{lispdisp} равна @code{true},
1196 Lisp символы отображаются с вопросительным знаком @code{?} перед ними.
1197 В противном случае Lisp символы отображаются без знака.
1208 (%i1) lispdisp: false$
1211 (%i3) lispdisp: true$
1216 @opencatbox{Категории:}
1217 @category{Флаги и переменные вывода}
1222 @deffn {Функция} load (@var{filename})
1223 Вычисляет выражения в @var{filename},
1224 тем самым загружая переменные, функции и другие объекты в Maxima.
1225 Значения любых существовавших объектов заменяются связями, полученными из @var{filename}.
1226 Для поиска файла @code{load} вызывает @code{file_search},
1227 пути поиска берутся из @code{file_search_maxima} и @code{file_search_lisp}.
1228 Если @code{load} выполнена успешно, то возвращается имя файла, иначе печатается сообщение об ошибке.
1230 @code{load} работает с равным успехом как для Lisp, так и для Maxima программ.
1231 Файлы, созданные командами @code{save}, @code{translate_file} и @code{compile_file}, которые создают
1232 код Lisp, и @code{stringout}, которая создает код Maxima, могут быть обработаны функцией @code{load}.
1233 @code{load} вызывает @code{loadfile} для загрузки Lisp файлов и @code{batchload} для загрузки Maxima файлов.
1235 @code{load} не распознает конструкции @code{:lisp} в файлах Maxima, и во время обработки @var{filename},
1236 глобальные переменные @code{_}, @code{__}, @code{%} и @code{%th} имеют те связи, которые были у них в момент
1239 См. также @code{loadfile}, @code{batch}, @code{batchload} и @code{demo}.
1240 @code{batch}, @code{batchload} и @code{demo} выполняют Maxima файлы.
1242 См. @code{file_search} для более подробного ознакомления с механизмом поиска файлов.
1244 @code{load} вычисляет свой аргумент.
1246 @opencatbox{Категории:}
1247 @category{Управление сессией}
1248 @category{Ввод файлов}
1253 @deffn {Функция} loadfile (@var{filename})
1254 Вычисляет выражения Lisp в @var{filename}.
1255 @code{loadfile} не вызывает @code{file_search}, поэтому @code{filename} должен включать
1256 расширение и информацию о пути, достаточную для поиска файла.
1258 @code{loadfile} может обрабатывать файлы, созданные командами @code{save}, @code{translate_file} и @code{compile_file}.
1259 Возможно, удобнее использовать @code{load} вместо @code{loadfile}.
1261 @opencatbox{Категории:}
1262 @category{Управление сессией}
1263 @category{Ввод файлов}
1268 @defvr {Управляющая переменная} loadprint
1269 Значение по умолчанию: @code{true}
1271 @code{loadprint} управляет печатью сообщение после загрузки файла.
1275 Если @code{loadprint} равна @code{true}, сообщение всегда выводится.
1277 Если @code{loadprint} равна @code{'loadfile}, сообщение выводится только в случае,
1278 когда файл загружается функцией @code{loadfile}.
1280 Когда @code{loadprint} равна @code{'autoload},
1281 сообщение выводится только если файл загружается автоматически.
1282 См. @code{setup_autoload}.
1284 Когда @code{loadprint} равен @code{false}, сообщение не выводится.
1287 @opencatbox{Категории:}
1288 @category{Ввод файлов}
1289 @category{Глобальные флаги}
1294 @defvr {Управляющая переменная} obase
1295 Значение по умолчанию: 10
1297 @code{obase} -- основание системы счисления в которой Maxima отображает целые числа.
1299 Переменной @code{obase} можно присвоить любое целое число между 2 и 35 (десятичное),
1301 Когда @code{obase} больше десяти, цифрами являются десятичные цифры от 0 до 9 и
1302 заглавные буквы латинского алфавита A, B, C, ..., по мере необходимости.
1303 Цифры системы с основанием 35, самым большим из допустимых,
1304 включают цифры от 0 до 9 и буквы от A до Y.
1306 См. также @code{ibase}.
1308 @c NEED EXAMPLES HERE
1309 @opencatbox{Категории:}
1310 @category{Флаги и переменные вывода}
1311 @category{Работа в консоли}
1316 @defvr {Управляющая переменная} outchar
1317 Значение по умолчанию: @code{%o}
1319 @code{outchar} -- это префикс меток для выражений, вычисленных системой Maxima.
1320 Maxima автоматически генерирует метки для каждого вычисленного выражения, соединяя
1321 @code{outchar} с @code{linenum}.
1322 Переменной @code{outchar} можно присвоить любую строку или символ, не обязательно
1326 (%i1) outchar: "output";
1328 (%i2) expand ((a+b)^3);
1330 (output2) b + 3 a b + 3 a b + a
1334 См. также @code{labels}.
1336 @opencatbox{Категории:}
1337 @category{Флаги и переменные вывода}
1342 @c STILL EXISTS, NEEDS CLARIFICATION !!!
1343 @defvr {Управляющая переменная} packagefile
1344 Значение по умолчанию: @code{false}
1346 Разработчики, которые используют @code{save} или @code{translate}, создавая пакеты (файлы)
1347 для использования другими, возможно захотят установить @code{packagefile: true},
1348 чтобы при загрузке файла предотвратить
1349 занесение информации, кроме необходимой, в списки Maxima (такие как @code{values},
1351 В этом случае содержимое пакета будет загружено не в виде пользовательских данных.
1352 Заметим, что это не решает проблему возможного конфликта имен.
1353 Также заметим, что переменная просто указывает на то, что выводится в пакетный файл.
1354 Установка управляющей переменной в @code{true} также полезна для создания
1355 инициализационных файлов Maxima.
1357 @opencatbox{Категории:}
1358 @category{Флаги и переменные трансляции}
1363 @defvr {Управляющая переменная} pfeformat
1364 Значение по умолчанию: @code{false}
1366 Когда @code{pfeformat} равна @code{true}, рациональная дробь отображается при помощи
1367 косой черты (прямого слэша). Целочисленный знаменатель @code{n} отображается
1368 как множитель @code{1/n}.
1371 (%i1) pfeformat: false$
1380 (%i4) pfeformat: true$
1387 @opencatbox{Категории:}
1388 @category{Флаги и переменные вывода}
1393 @deffn {Функция} print (@var{expr_1}, ..., @var{expr_n})
1394 Вычисляет и отображает @var{expr_1}, ..., @var{expr_n} одно за другим,
1395 слева направо, начиная с левого края экрана консоли.
1397 Функция @code{print} возвращает значение своего последнего аргумента.
1398 @code{print} не создает меток промежуточных выражений.
1400 См. также @code{display}, @code{disp}, @code{ldisplay} и @code{ldisp}.
1401 Эти функции отображают по одному выражению на строку, в то время как @code{print} старается
1402 отобразить по два или больше выражений в каждой строке.
1404 Чтобы отобразить содержимое файла, см. @code{printfile}.
1407 (%i1) r: print ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
1408 radcan (log (a^10/b)))$
1410 (a+b)^3 is b + 3 a b + 3 a b + a log (a^10/b) is
1414 (%o2) 10 log(a) - log(b)
1415 (%i3) disp ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
1416 radcan (log (a^10/b)))$
1420 b + 3 a b + 3 a b + a
1427 @opencatbox{Категории:}
1428 @category{Функции вывода}
1433 @deffn {Функция} printfile (@var{path})
1435 Выводит файл с именем @var{path} на консоль.
1436 Значение @var{path} может быть строкой или символом.
1437 Если символ, то он преобразуется в строку.
1439 Если файл с именем @var{path} доступен в текущей директории, то
1440 он печатается на консоли.
1441 В противном случае @code{printfile} пытается найти файл добавляя @var{path}
1442 ко всем элементам @code{file_search_usage}
1443 при помощи @code{filename_merge}.
1445 @code{printfile} возвращает @var{path}, если файл существует,
1446 и результат успешного поиска файла.
1448 @opencatbox{Категории:}
1449 @category{Ввод файлов}
1450 @category{Работа в консоли}
1454 @deffn {Функция} tcl_output (@var{list}, @var{i0}, @var{skip})
1455 @deffnx {Функция} tcl_output (@var{list}, @var{i0})
1456 @deffnx {Функция} tcl_output ([@var{list_1}, ..., @var{list_n}], @var{i})
1458 Выводит элементы списков заключенными в фигурные скобки @code{@{ @}},
1459 в виде пригодном для использования в языке Tcl/Tk.
1462 @code{tcl_output (@var{list}, @var{i0}, @var{skip})}
1463 выводит элементы списка @var{list} с номерами @var{i0}, @code{@var{i0} + @var{skip}},
1464 @code{@var{i0} + 2 @var{skip}} и так далее.
1466 @code{tcl_output (@var{list}, @var{i0})} равнозначна @code{tcl_output (@var{list}, @var{i0}, 2)}.
1468 @code{tcl_output ([@var{list_1}, ..., @var{list_n}], @var{i})}
1469 выводит @var{i}-ые элементы списков @var{list_1}, ..., @var{list_n}.
1473 @c tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$
1474 @c tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$
1475 @c tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$
1476 @c tcl_output ([x1, y1, x2, y2, x3, y3], 2)$
1477 @c tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$
1479 @c EXAMPLE OUTPUT: CLISP
1480 @c OUTPUT IS OK FOR FIRST TWO, BROKEN FOR OTHERS
1481 @c GCL OUTPUT: SAME FOR FIRST TWO
1482 @c GCL FAILS ON OTHERS (IN EACH CASE COMPLAINING ELEMENTS ARE "not of type (OR RATIONAL LISP:FLOAT)"
1484 (%i1) tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$
1486 @{1.000000000 4.000000000
1488 (%i2) tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$
1490 @{2.000000000 5.000000000
1492 (%i3) tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$
1494 @{((RAT SIMP) 3 7) ((RAT SIMP) 11 13)
1496 (%i4) tcl_output ([x1, y1, x2, y2, x3, y3], 2)$
1500 (%i5) tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$
1502 @{SIMP 1.000000000 11.00000000
1508 @deffn {Функция} read (@var{expr_1}, ..., @var{expr_n})
1509 Выводит @var{expr_1}, ..., @var{expr_n}, затем считывает одно выражение с консоли и
1510 возвращает вычисленное выражение.
1512 См. также @code{readonly}.
1516 (%i2) foo: read ("foo is", foo, " -- enter new value.")$
1517 foo is 42 -- enter new value.
1524 @opencatbox{Категории:}
1525 @category{Работа в консоли}
1530 @deffn {Функция} readonly (@var{expr_1}, ..., @var{expr_n})
1531 Выводит @var{expr_1}, ..., @var{expr_n}, затем считывает одно выражение с консоли
1532 и Возвращает его без вычисления.
1536 (%i2) foo: readonly ("Enter an expression:");
1537 Enter an expression:
1541 (%i3) foo: read ("Enter an expression:");
1542 Enter an expression:
1547 См. также @code{read}.
1549 @opencatbox{Категории:}
1550 @category{Работа в консоли}
1555 @deffn {Функция} reveal (@var{expr}, @var{depth})
1556 Замещает части выражения @var{expr} заданного уровня вложенности @var{depth}
1561 Суммы и разности заменяются на @code{Sum(@var{n})},
1562 где @var{n} -- количество слагаемых.
1564 Произведения заменяются на @code{Product(@var{n})},
1565 где @var{n} -- количество множителей.
1567 Степени заменяются на @code{Expt}.
1569 Дроби заменяются на @code{Quotient}.
1571 Унарное отрицание заменяется на @code{Negterm}.
1574 Если @var{depth} больше или равен максимальному уровню вложенности в выражении @var{expr},
1575 то @code{reveal (@var{expr}, @var{depth})} возвращает @var{expr} без изменений.
1577 @code{reveal} вычисляет свои аргументы.
1578 @code{reveal} возвращает анализируемое выражение.
1583 (%i1) e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
1586 (%o1) -------------------------
1589 (%i2) reveal (e, 1);
1591 (%i3) reveal (e, 2);
1595 (%i4) reveal (e, 3);
1596 Expt + Negterm + Expt
1597 (%o4) ------------------------
1598 Product(2) + Expt + Expt
1599 (%i5) reveal (e, 4);
1602 (%o5) ------------------------------------
1603 Product(2) Product(2)
1605 (%i6) reveal (e, 5);
1608 (%o6) --------------------------
1611 (%i7) reveal (e, 6);
1614 (%o7) -------------------------
1619 @opencatbox{Категории:}
1620 @category{Выражения}
1621 @category{Функции вывода}
1626 @defvr {Управляющая переменная} rmxchar
1627 Значение по умолчанию: @code{]}
1629 Правая сторона матриц изображается символами @code{rmxchar}.
1631 См. также @code{lmxchar}.
1632 @c !!! кстати описания переменной lmxchar в документации нет. :)
1634 @opencatbox{Категории:}
1635 @category{Флаги переменные вывода}
1640 @deffn {Функция} save (@var{filename}, @var{name_1}, @var{name_2}, @var{name_3}, ...)
1641 @deffnx {Функция} save (@var{filename}, values, functions, labels, ...)
1642 @deffnx {Функция} save (@var{filename}, [@var{m}, @var{n}])
1643 @deffnx {Функция} save (@var{filename}, @var{name_1}=@var{expr_1}, ...)
1644 @deffnx {Функция} save (@var{filename}, all)
1645 @deffnx {Функция} save (@var{filename}, @var{name_1}=@var{expr_1}, @var{name_2}=@var{expr_2}, ...)
1647 Сохраняет текущие значения аргументов @var{name_1}, @var{name_2}, @var{name_3}, ..., в @var{filename}.
1648 Аргументами являются имена переменных, функций и прочих объектов.
1649 Если имя не имеет значения или связанной с ним функцией, оно игнорируется.
1650 @code{save} возвращает @var{filename}.
1652 @code{save} сохраняет данные в форме Lisp выражений.
1653 Данные, сохраненные функцией @code{save}, можно загрузить при помощи @code{load (@var{filename})}.
1655 Глобальная управляющая переменная @code{file_output_append} управляет тем,
1656 будет ли информация добавлена к файлу, или файл будет переписан заново.
1657 Когда @code{file_output_append} равен @code{true}, происходит добавление,
1658 иначе @code{save} переписывает файл вывода. В обоих случаях @code{save} создает
1659 файл, если он до этого не существовал.
1661 Особая форма @code{save (@var{filename}, values, functions, labels, ...)}
1662 сохраняет элементы перечисленные в списках @code{values}, @code{functions}, @code{labels} и т. д.
1663 Возможны любые имена определенные в @code{infolist}.
1664 @code{values} включает все определенные пользователем переменные.
1666 Особая форма @code{save (@var{filename}, [@var{m}, @var{n}])} сохраняет значения
1667 входных и результирующих выражений с номерами от @var{m} до @var{n}.
1668 Заметим, что @var{m} и @var{n} должны быть буквальными целыми.
1669 Входные и результирующие метки можно также записать одну за другой, например, @code{save ("foo.1", %i42, %o42)}.
1670 @code{save (@var{filename}, labels)} сохраняет все входные и результирующие выражения.
1671 Сохраненные выражения при загрузке заменяют существующие.
1673 Особая форма @code{save (@var{filename}, @var{name_1}=@var{expr_1}, @var{name_2}=@var{expr_2}, ...)}
1674 сохраняет значения @var{expr_1}, @var{expr_2}, ... с именами @var{name_1}, @var{name_2}, ...
1675 Эту форму полезно применять для входных и результирующих меток,
1676 например, @code{save ("foo.1", aa=%o88)}.
1677 С правой стороны равенства в этой форме может стоять любое выражение, которое вычисляется.
1678 Эта форма не вводит новые имена в текущий сеанс Maxima, только сохраняет их в @var{filename}.
1680 Эти особые формы и общую форму функции @code{save} можно как угодно смешивать.
1681 Например: @code{save (@var{filename}, aa, bb, cc=42, functions, [11, 17])}.
1683 Особая форма @code{save (@var{filename}, all)} сохраняет текущее состояние Maxima,
1684 включая все определенные пользователем переменные, функции, массивы и т. д., а также
1685 элементы, заданные автоматически.
1686 Сохраняемые элементы включают в себя системные переменные, такие как @code{file_search_maxima} или @code{showtime},
1687 если пользователь присвоил им новые значения. См. @code{myoptions}.
1689 @code{save} вычисляет @var{filename}, все остальные аргументы не вычисляются.
1691 @opencatbox{Категории:}
1692 @category{Управление сессией}
1693 @category{Вывод файлов}
1698 @c NEEDS MORE WORK !!!
1699 @defvr {Управляющая переменная} savedef
1700 Значение по умолчанию: @code{true}
1702 Когда @code{savedef} равно @code{true}, Maxima версия определенной пользователем функции
1703 защищается, при ее трансляции. Это позволяет
1704 отобразить ее определение при помощи @code{dispfun} и дает возможность редактировать ее.
1706 Когда @code{savedef} равна @code{false}, имена транслируемых функций
1707 удаляются из списка @code{functions}.
1709 @opencatbox{Категории:}
1710 @category{Флаги и переменные трансляции}
1715 @c THIS FUNCTION IS IN THE SHARE PACKAGE itensor.lisp
1716 @c MOVE THIS DESCRIPTION TO Itensor.texi
1717 @deffn {Функция} show (@var{expr})
1718 При отображении @code{expr}, у индексированных объектов ковариантные
1719 индексы показываются как нижние, а контравариантные --
1720 как верхние. Индексы дифференцирования отображаются нижними и отделяются от
1721 ковариантных запятой.
1723 @opencatbox{Категории:}
1724 @category{Пакет itensor}
1725 @category{Функции вывода}
1730 @deffn {Функция} showratvars (@var{expr})
1731 Возвращает список переменных в каноническом рациональном выражении @code{expr}.
1733 См. также @code{ratvars}.
1735 @opencatbox{Категории:}
1736 @category{Рациональные выражения}
1737 @category{Функции вывода}
1742 @defvr {Управляющая переменная} stardisp
1743 Значение по умолчанию: @code{false}
1745 Когда @code{stardisp} равно @code{true}, произведение отображается
1746 со звездочкой между операндами.
1748 @opencatbox{Категории:}
1749 @category{Флаги переменные вывода}
1754 @deffn {Функция} string (@var{expr})
1755 Преобразовывает @code{expr} в линейное представление,
1756 как оно было бы введено с клавиатуры.
1758 Значение, возвращаемое функцией @code{string}, является строкой,
1759 поэтому не может использоваться в вычислениях.
1761 @opencatbox{Категории:}
1767 @defvr {Управляющая переменная} stringdisp
1768 Значение по умолчанию: @code{false}
1770 Когда @code{stringdisp} равна @code{true},
1771 строки отображаются заключенными в двойные кавычки.
1772 В противном случае кавычки опускаются.
1774 @code{stringdisp} всегда @code{true}, при выводе определений функций.
1779 @c stringdisp: false$
1780 @c "This is an example string.";
1782 @c print ("This is a string in a function definition.");
1783 @c stringdisp: true$
1784 @c "This is an example string.";
1787 (%i1) stringdisp: false$
1788 (%i2) "This is an example string.";
1789 (%o2) This is an example string.
1791 print ("This is a string in a function definition.");
1793 print("This is a string in a function definition.")
1794 (%i4) stringdisp: true$
1795 (%i5) "This is an example string.";
1796 (%o5) "This is an example string."
1799 @opencatbox{Категории:}
1800 @category{Флаги переменные вывода}
1805 @deffn {Функция} stringout (@var{filename}, @var{expr_1}, @var{expr_2}, @var{expr_3}, ...)
1806 @deffnx {Функция} stringout (@var{filename}, [@var{m}, @var{n}])
1807 @deffnx {Функция} stringout (@var{filename}, input)
1808 @deffnx {Функция} stringout (@var{filename}, functions)
1809 @deffnx {Функция} stringout (@var{filename}, values)
1811 @code{stringout} записывает выражение в файл в той же форме, в которой
1812 оно было бы введено с клавиатуры. Файл можно использовать в качестве входного для
1813 команд @code{batch} или @code{demo}, его также можно редактировать для любых целей.
1814 @code{stringout} можно выполнять во время работы @code{writefile}.
1816 Глобальная переменная @code{file_output_append} определяет будет ли
1817 @code{stringout} добавлять или переписывать выходной файл.
1818 Если @code{file_output_append} равна @code{true},
1819 @code{stringout} дописывает выходной файл, иначе переписывает его.
1820 В обоих случаях @code{stringout} создает файл, если тот не существовал.
1822 Общий вид команды @code{stringout} записывает значения одного или нескольких выражений в файл.
1823 Заметим, что если выражения являются переменной, записывается только значение переменной, но не ее имя.
1824 В полезном специальном случае, выражения могут быть метками входных
1825 (@code{%i1}, @code{%i2}, @code{%i3}, ...) или результирующих (@code{%o1}, @code{%o2}, @code{%o3}, ...) выражений.
1827 Если @code{grind} равна @code{true}, @code{stringout} форматирует выход используя формат @code{grind}.
1828 Иначе используется формат @code{string}. См. @code{grind} и @code{string}.
1830 Особая форма @code{stringout (@var{filename}, [@var{m}, @var{n})} записывает значения входных выражений,
1831 с номерами от m до n, включительно.
1833 Особая форма @code{stringout (@var{filename}, input)} записывает в файл все входные выражения.
1835 Особая форма @code{stringout (@var{filename}, functions)} записывает в файл все пользовательские функции
1836 (перечисленные в глобальном списке @code{functions}).
1838 Особая форма @code{stringout (@var{filename}, values)} записывает в файл все пользовательские
1839 переменные (перечисленные в глобальном списке @code{values}). Каждая переменная выводится как
1840 оператор присваивания: с именем переменной, двоеточием и ее значением. Заметим, что общая форма
1841 @code{stringout} не выводит переменные в виде операторов присваивания.
1843 @opencatbox{Категории:}
1844 @category{Управление сессией}
1845 @category{Вывод файлов}
1850 @deffn {Функция} tex (@var{expr})
1851 @deffnx {Функция} tex (@var{expr}, @var{filename})
1852 @deffnx {Функция} tex (@var{expr}, false)
1853 @deffnx {Функция} tex (@var{label})
1854 @deffnx {Функция} tex (@var{label}, @var{filename})
1855 @deffnx {Функция} tex (@var{label}, false)
1857 Отображает выражение в представлении подходящим для системы подготовки документов TeX.
1858 Результат -- фрагмент документа, который можно скопировать в больший документ, но сам по себе
1859 он для обработки не подходит.
1861 @code{tex (@var{expr})} отображает TeX-представление выражения @var{expr} в консоль.
1863 @code{ (@var{label})} отображает TeX-представление выражения, помеченное @var{label},
1864 и назначает его метке выражения (отображаемой слева от выражения).
1865 Метки выражений TeX совпадают с метками Maxima.
1868 @code{tex (@var{expr}, @var{filename})} и @code{tex (@var{label}, @var{filename})}
1869 добавляют свой TeX-вывод в файл @var{filename}.
1871 @code{tex (@var{expr}, false)} и @code{tex (@var{label}, false)}
1872 возвращают свой вывод в виде строки.
1874 @code{tex} вычисляет свой первый аргумент после попытки определить, не является ли он меткой.
1875 Оператор две кавычки @code{''} вызывает вычисление аргумента, предотвращая
1876 попытки проверить, является ли он меткой.
1878 См. также @code{texput}.
1883 (%i1) integrate (1/(1+x^3), x);
1886 log(x - x + 1) sqrt(3) log(x + 1)
1887 (%o1) - --------------- + ------------- + ----------
1890 $$-@{@{\log \left(x^2-x+1\right)@}\over@{6@}@}+@{@{\arctan \left(@{@{2\,x-1
1891 @}\over@{\sqrt@{3@}@}@}\right)@}\over@{\sqrt@{3@}@}@}+@{@{\log \left(x+1\right)
1892 @}\over@{3@}@}\leqno@{\tt (\%o1)@}$$
1894 (%i3) tex (integrate (sin(x), x));
1897 (%i4) tex (%o1, "foo.tex");
1901 @code{tex (@var{expr}, false)} возвращает свой вывод в виде строки.
1904 @c S : tex (x * y * z, false);
1908 (%i1) S : tex (x * y * z, false);
1914 @opencatbox{Категории:}
1915 @category{Вывод в формате TeX}
1916 @category{Вывод файлов}
1921 @deffn {Функция} texput (@var{a}, @var{s})
1922 @deffnx {Функция} texput (@var{a}, @var{s}, @var{operator_type})
1923 @deffnx {Функция} texput (@var{a}, [@var{s_1}, @var{s_2}], matchfix)
1924 @deffnx {Функция} texput (@var{a}, [@var{s_1}, @var{s_2}, @var{s_3}], matchfix)
1926 Задает TeX вывод для атома @var{a}, который может быть символом или именем оператора.
1928 @code{texput (@var{a}, @var{s})} заставляет функцию @code{tex} в своем выводе вставлять
1929 строку @var{s} вместо @var{a}.
1931 @code{texput (@var{a}, @var{s}, @var{operator_type})},
1932 где @var{operator_type} можеть принимать значения @code{prefix}, @code{infix}, @code{postfix}, @code{nary}
1933 или @code{nofix}, заставляет функцию @code{tex} вставлять @var{s} вместо @var{a} и помещать
1934 вставленный текст в подходящую позицию.
1936 @code{texput (@var{a}, [@var{s_1}, @var{s_2}], matchfix)}
1937 заставляет @code{tex} вставлять @var{s_1} и @var{s_2} в вывод TeX с обоих сторон аргументов атома @var{a}.
1938 Аргументы (если их несколько) разделяются запятыми.
1940 @code{textpput (@var{a}, [@var{s_1}, @var{s_2}, @var{s_3}], matchfix)}
1941 заставляет @code{tex} в TeX-выводе вставлять @var{s_1} и @var{s_2} с обоих сторон аргументов атома @var{a}
1942 и разделять их аргументом @var{s_3}.
1946 Определение TeX вывода переменной.
1948 @c texput (me,"\\mu_e");
1953 (%i1) texput (me,"\\mu_e");
1960 Определение TeX вывода обычной функции (не оператору).
1962 @c texput (lcm, "\\mathrm{lcm}");
1963 @c tex (lcm (a, b));
1967 (%i1) texput (lcm, "\\mathrm@{lcm@}");
1968 (%o1) \mathrm@{lcm@}
1969 (%i2) tex (lcm (a, b));
1970 $$\mathrm@{lcm@}\left(a , b\right)$$
1974 Определение TeX вывода префиксного оператора.
1977 @c texput ("grad", " \\nabla ", prefix);
1982 (%i1) prefix ("grad");
1984 (%i2) texput ("grad", " \\nabla ", prefix);
1991 Определение вывода инфиксного оператора.
1994 @c texput ("~", " \\times ", infix);
2001 (%i2) texput ("~", " \\times ", infix);
2008 Определение вывода постфиксного оператора.
2011 @c texput ("##", "!!", postfix);
2016 (%i1) postfix ("##");
2018 (%i2) texput ("##", "!!", postfix);
2025 Определение вывода n-арного оператора.
2028 @c texput ("@@", " \\circ ", nary);
2029 @c tex (a @@ b @@ c @@ d);
2033 (%i1) nary ("@@@@");
2035 (%i2) texput ("@@@@", " \\circ ", nary);
2037 (%i3) tex (a @@@@ b @@@@ c @@@@ d);
2038 $$a \circ b \circ c \circ d$$
2042 Определение TeX вывода безфиксного оператора без аргументов.
2045 @c texput ("foo", "\\mathsc{foo}", nofix);
2050 (%i1) nofix ("foo");
2052 (%i2) texput ("foo", "\\mathsc@{foo@}", nofix);
2053 (%o2) \mathsc@{foo@}
2059 Назначение вывода матчфиксному парному оператору.
2061 @c matchfix ("<<", ">>");
2062 @c texput ("<<", [" \\langle ", " \\rangle "], matchfix);
2065 @c texput ("<<", [" \\langle ", " \\rangle ", " \\, | \\,"],
2072 (%i1) matchfix ("<<", ">>");
2074 (%i2) texput ("<<", [" \\langle ", " \\rangle "], matchfix);
2075 (%o2) [ \langle , \rangle ]
2077 $$ \langle a \rangle $$
2079 (%i4) tex (<<a, b>>);
2080 $$ \langle a , b \rangle $$
2082 (%i5) texput ("<<", [" \\langle ", " \\rangle ", " \\, | \\,"],
2084 (%o5) [ \langle , \rangle , \, | \,]
2086 $$ \langle a \rangle $$
2088 (%i7) tex (<<a, b>>);
2089 $$ \langle a \, | \,b \rangle $$
2093 @opencatbox{Категории:}
2094 @category{Вывод в формате TeX}
2099 @c NEEDS CLARIFICATION
2100 @deffn {Функция} system (@var{command})
2101 Выполняет команду @var{command} как отдельный процесс.
2102 Команда отправляется на выполнение командной оболочке, заданной по умолчанию.
2103 @code{system} поддерживается не всеми операционными системами, она в основном существует
2104 в Unix и Unix-подобных окружениях.
2106 Предположим, что @code{_hist.out} -- список частот, который вы хотите изобразить в виде гистограммы
2107 при помощи программы @code{xgraph}.
2110 (%i1) (with_stdout("_hist.out",
2111 for i:1 thru length(hist) do (
2113 system("xgraph -bar -brw .7 -nl < _hist.out"));
2116 Для того чтобы создать готовый график в фоновом режиме (вернуться к управлению Maxima)
2117 и удалить временный файл после завершения, сделайте так:
2120 system("(xgraph -bar -brw .7 -nl < _hist.out; rm -f _hist.out)&")
2125 @defvr {Управляющая переменная} ttyoff
2126 Значение по умолчанию: @code{false}
2128 Когда @code{ttyoff} равна @code{true}, выводимые выражения не отображаются.
2129 Выводимые выражения по прежнему вычисляются и связываются с метками. См. @code{labels}.
2131 @code{ttyoff} не влияет на текст, отображаемый встроенными функциями, такой как
2132 сообщения об ошибках и вывод @code{describe}.
2134 @opencatbox{Категории:}
2135 @category{Флаги переменные вывода}
2140 @deffn {Функция} with_stdout (@var{f}, @var{expr_1}, @var{expr_2}, @var{expr_3}, ...)
2141 @deffnx {Функция} with_stdout (@var{s}, @var{expr_1}, @var{expr_2}, @var{expr_3}, ...)
2142 Вычисляет @var{expr_1}, @var{expr_2}, @var{expr_3}, ... и записывает любой сгенерированный
2143 вывод в файл @var{f} или в выходной поток @var{s}.
2144 Вычисленные выражения не записываются в вывод.
2145 Вывод может генерироваться кроме прочих функциями @code{print}, @code{display}, @code{grind}.
2147 Глобальная переменная @code{file_output_append} управляет тем, будет ли @code{with_stdout}
2148 дописывать или переписывать заново файл @var{f}.
2149 Если @code{file_output_append} равна @code{true}, @code{with_stdout} добавляет вывод к файлу.
2150 Иначе @code{with_stdout} переписывает файл.
2151 В обоих случаях, @code{with_stdout} создает файл, если тот не существовал.
2153 @code{with_stdout} возвращает значение своего последнего аргумента.
2155 См. также @code{writefile}.
2157 @c THIS DOESN'T SEEM VERY IMPORTANT TO MENTION ...
2158 @c Note the binding of display2d to be
2159 @c false, otherwise the printing will have things like "- 3" instead
2163 @c THIS EXAMPLE USES SOME UNIX-ISH CONSTRUCTS -- WILL IT WORK IN WINDOWS ???
2164 @c ALSO IT'S SORT OF COMPLICATED AND THE SIMPLER SECOND EXAMPLE ILLUSTRATES with_stdout BETTER !!!
2165 @c mygnuplot (f, var, range, number_ticks) :=
2166 @c block ([numer:true, display2d:false],
2167 @c with_stdout("tmp.out",
2168 @c dx: (range[2]-range[1])/number_ticks,
2169 @c for x: range[1] thru range[2] step dx
2170 @c do print (x, at (f, var=x))),
2171 @c system ("echo \"set data style lines; set title '", f,"' ;plot '/tmp/gnu'
2172 @c ;pause 10 \" | gnuplot"))$
2173 (%i1) with_stdout ("tmp.out", for i:5 thru 10 do
2174 print (i, "! yields", i!))$
2175 (%i2) printfile ("tmp.out")$
2184 @opencatbox{Категории:}
2185 @category{Вывод файлов}
2190 @deffn {Функция} writefile (@var{filename})
2191 Начинает записывать копию сессии Maxima в @var{filename}.
2192 Все взаимодействия между пользователем и Maxima записываются в этот файл точно в том виде,
2193 в котором они показываются в консоли.
2195 Копия печатается в формате консольного вывода, который не может быть перезагружен в Maxima.
2196 Если хотите создать файл, содержащий выражения, с возможностью его загрузки, см. @code{save} и @code{stringout}.
2197 @code{save} сохраняет выражения в форме Lisp, в то время как @code{stringout} сохраняет их в форме Maxima.
2199 Результат выполнения @code{writefile}, когда @var{filename} уже существует, зависит
2200 от реализации лежащего в основе Lisp. Выходной файл может быть стерт или дописан.
2201 @code{appendfile} всегда дописывает файл.
2203 Может оказаться удобным выполнить @code{playback} после @code{writefile} чтобы сохранить
2204 отображение предыдущих взаимодействий. Так @code{playback} отображает только входные или результирующие
2205 переменные (@code{%i1}, @code{%o1} и т. д.), любой вывод, создаваемый печатающими выражениями в
2206 функциях (в противоположность возвращаемому значению), не отображается функцией @code{playback}.
2208 @code{closefile} закрывает файл, который открыла @code{writefile} или @code{appendfile}.
2210 @opencatbox{Категории:}
2211 @category{Вывод файлов}
2212 @category{Работа в консоли}