@c Language=Russian
@c Encoding=CP1251
@c File=Help.texi 
@c OriginalRevision=1.25
@c TranslatedBy: (c) 2007-02 Andrey Siver <ihep-2005@yandex.ru>

@menu
* Lisp и Maxima::            
* Сборка мусора::          
* Документация::               
* Справочная система::        
@end menu

@node Lisp и Maxima, Сборка мусора, Справка, Справка
@section Lisp и Maxima

Maxima написана на Lisp, поэтому легко получить доступ к Lisp функциям и переменным из Maxima и наоборот.
Lisp и Maxima символы различают с помощью соглашения об именах.
Lisp символ, который начинается со знака @code{$} соответствует Maxima символу 
без знака доллара.
@c NEED TO MENTION THIS OR IS IT JUST CLUTTERING ??
@c This includes special Maxima variables such as @code{%} and input and output labels,
@c which appear as @code{$%}, @code{$%i1}, @code{$%o1}, etc., in Lisp.
Maxima символ, который начинается со знака @code{?} соответствует 
Lisp символу без знака вопроса.
Например, Maxima символ @code{foo} соответствует Lisp символу @code{$foo},
в то время как Maxima символ @code{?foo} соответствует Lisp символу @code{foo},
Заметим, что @code{?foo} записано без пробелов между @code{?} и @code{foo};
иначе можно перепутать с @code{describe ("foo")}.

@code{-}, @code{*}, и другие специальные знаки в Lisp символах
должны быть экранированы @code{\} везде, где они появляются в коде Maxima.
Например, Lisp идентификатор @code{*foo-bar*} записывается как @code{?\*foo\-bar\*} в Maxima.

Lisp код может быть выполнен из Maxima сессии. Простая строка с Lisp кодом 
(содержащая одну и более форм) может быть выполнена с помощью специальной 
команды @code{:lisp}. Например,

@example
(%i1) :lisp (foo $x $y)
@end example

@noindent
вызывает Lisp функцию @code{foo} с Maxima переменными @code{x} и @code{y} в качестве аргументов.
@code{:lisp} конструкция может появляться в интерактивном приглашении
или в файле, исполняемом командой @code{batch} или @code{demo}, 
но только не в файле исполняемом командами @code{load}, @code{batchload}, 
@code{translate_file}, или @code{compile_file}.

Функция @code{to_lisp()} открывает интегративную Lisp сессию.
Ввод @code{(to-maxima)} закрывает Lisp сессию и возвращает к Maxima.
@c I DON'T EVEN WANT TO MENTION USING CTRL-C TO OPEN A LISP SESSION.
@c (1) IT TAKES EXTRA SET UP TO GET STARTED NAMELY :lisp (setq *debugger-hook* nil)
@c (2) IT GETS SCREWED UP EASILY -- TYPE SOMETHING WRONG AND YOU CAN'T GET BACK TO MAXIMA
@c (3) IT DOESN'T OFFER FUNCTIONALITY NOT PRESENT IN THE to_lisp() SESSION

Lisp функции и переменные, которые, как известно, видны в Maxima как
функции и переменные с обычными именами (без специальной пунктуации)
должны иметь Lisp имена, начинающиеся со знака @code{$}.

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

@enumerate
@item
Lisp идентификатор не заключенный в вертикальные черты соответствует Maxima идентификатору в нижнем регистре. 
Является ли Lisp идентификатор в верхнем, нижнем, или смешанном регистре, регистр игнорируется.
То есть, Lisp @code{$foo}, @code{$FOO}, и @code{$Foo} - все соответствуют Maxima @code{foo}.
@item
Lisp идентификатор, имеющий все знаки в нижнем или все знаки в верхнем регистре
и заключенный в вертикальные черты, соответствует Maxima идентификатору с именем в обратном регистре.
То есть, верхний регистр меняется в нижний и нижний регистр - в верхний.
Например, Lisp @code{|$FOO|} и @code{|$foo|}
соответствуют Maxima @code{foo} и @code{FOO}, в указанном порядке.
@item
Lisp идентификатор, который записан в смешанном регистре и заключенный в вертикальные черты соответствует Maxima идентификатору в том же регистре.
Например, Lisp @code{|$Foo|} соответствует Maxima @code{Foo}.
@end enumerate

@code{#$} Lisp макрооператор позволяет использовать Maxima выражения в Lisp коде.
@code{#$@var{expr}$} превращается в Lisp выражение, эквивалентное Maxima выражению @var{expr}.

@example
(msetq $foo #$[x, y]$)
@end example

@noindent

Это имеет тот же самый эффект как при вводе:

@example
(%i1) foo: [x, y];
@end example

@noindent
Lisp функция @code{displa} печатает выражение в Maxima форме.

@example
(%i1) :lisp #$[x, y, z]$ 
((MLIST SIMP) $X $Y $Z)
(%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z))
[x, y, z]
NIL
@end example

Функции, заданные в Maxima не являются обычными Lisp функциями.
Lisp функция @code{mfuncall} вызывает Maxima функцию.
Например:

@example
(%i1) foo(x,y) := x*y$
(%i2) :lisp (mfuncall '$foo 'a 'b)
((MTIMES SIMP) A B)
@end example

Некоторые Lisp функции скрыты в Maxima пакете, а именно такие как:

@code{complement},
@code{continue},
@code{//},
@code{float},
@code{functionp},
@code{array},
@code{exp},
@code{listen},
@code{signum},
@code{atan},
@code{asin},
@code{acos},
@code{asinh},
@code{acosh},
@code{atanh},
@code{tanh},
@code{cosh},
@code{sinh},
@code{tan},
@code{break}
и @code{gcd}.

@opencatbox
@category{Программирование}
@closecatbox

@node Сборка мусора, Документация, Lisp и Maxima, Справка
@section Сборка мусора

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

@c HOW MUCH OF THE FOLLOWING STILL HOLDS ??
@c WHAT ABOUT GC IN GCL ON MS WINDOWS ??
@c SHOULD WE SAY SOMETHING ABOUT GC FOR OTHER LISPS ??
Под GCL, на UNIX системах, где доступны вызовы системы ``mprotect'', 
(включая SUN OS 4.0 и некоторые версии BSD) доступна прямая сборка мусора.   
Это ограничивает сборку страницами, в которые недавно производилась запись.    
См. документацию по GCL по ключевым словам ALLOCATE и GBC. На уровне
Lisp, установка (setq si::*notify-gbc* t) поможет вам определить, какие области
памяти, возможно, требуют больше пространства.

@node Документация, Справочная система, Сборка мусора, Справка
@section Документация

@c SHOULD TALK ABOUT OTHER FORMS OF DOCUMENTATION ASIDE FROM ON-LINE MANUAL.

Руководство пользователя Maxima можно просматривать в различных форматах.
Из интерактивного приглашения Maxima, руководство пользователя
просматривается как обычный текст командой @code{?} (то есть, функция @code{describe}).
Руководство пользователя просматривается как @code{info} гипертекст с помощью @code{info} 
просмотрщиком и как веб-страница с помощью обычного веб-браузера.

@code{example} показывает примеры для многих Maxima функций.
Например,

@example
(%i1) example (integrate);
@end example

дает

@example
(%i2) test(f):=block([u],u:integrate(f,x),ratsimp(f-diff(u,x)))
(%o2) test(f) := block([u], u : integrate(f, x), 

                                         ratsimp(f - diff(u, x)))
(%i3) test(sin(x))
(%o3)                           0
(%i4) test(1/(x+1))
(%o4)                           0
(%i5) test(1/(x^2+1))
(%o5)                           0
@end example

и дополнительный вывод.

@opencatbox
@category{Работа в консоли}
@closecatbox

@node Справочная система,  , Документация, Справка
@section Справочная система

@deffn {Функция} demo (@var{filename})
вычисляет Maxima выражения в @var{filename} и показывает результаты.
@code{demo} останавливается после вычислений каждого выражения 
и продолжает после того, как пользователь нажмет ``Enter''.
(Если запущена Xmaxima, @code{demo} необходимо перед вводом 
ставить @code{;}).

@code{demo} просматривает список директорий
@code{file_search_demo}, чтобы найти @code{filename}.
Если файл имеет расширение @code{dem}, то его можно опустить.
См. также @code{file_search}.

@code{demo} вычисляет свои аргументы.
@code{demo} возвращает имя демонстрационного файла.

Пример:

@example
(%i1) demo ("disol");

batching /home/wfs/maxima/share/simplification/disol.dem
 At the _ prompt, type ';' followed by enter to get next demo
(%i2)                      load(disol)

_
(%i3)           exp1 : a (e (g + f) + b (d + c))
(%o3)               a (e (g + f) + b (d + c))

_
(%i4)                disolate(exp1, a, b, e)
(%t4)                         d + c

(%t5)                         g + f

(%o5)                   a (%t5 e + %t4 b)

_
(%i5) demo ("rncomb");

batching /home/wfs/maxima/share/simplification/rncomb.dem
 At the _ prompt, type ';' followed by enter to get next demo
(%i6)                     load(rncomb)

_
                             z         x
(%i7)               exp1 : ----- + ---------
                           y + x   2 (y + x)
                          z         x
(%o7)                   ----- + ---------
                        y + x   2 (y + x)

_
(%i8)                     combine(exp1)
                          z         x
(%o8)                   ----- + ---------
                        y + x   2 (y + x)

_
(%i9)                     rncombine(%)
                             2 z + x
(%o9)                       ---------
                            2 (y + x)

_
                             d   c   b   a
(%i10)                exp2 : - + - + - + -
                             3   3   2   2
                          d   c   b   a
(%o10)                    - + - + - + -
                          3   3   2   2

_
(%i11)                    combine(exp2)
                      2 d + 2 c + 3 (b + a)
(%o11)                ---------------------
                                6

_
(%i12)                   rncombine(exp2)
                      2 d + 2 c + 3 b + 3 a
(%o12)                ---------------------
                                6

_
(%i13) 
@end example

@opencatbox
@category{Работа в консоли} @category{Ввод файлов}
@closecatbox

@end deffn

@deffn {Функция} describe (@var{string})
@deffnx {Функция} describe (@var{string}, exact)
@deffnx {Функция} describe (@var{string}, inexact)
@ifinfo
@fnindex Справка
@end ifinfo

@code{describe(@var{string})} эквивалентно @code{describe(@var{string}, exact)}.

@code{describe(@var{string}, exact)} ищет элемент, с заголовком равным  
(независимо от регистра) @var{string}, если такой элемент есть.

@code{describe(@var{string}, inexact)} ищет все документированные элементы, 
которые содержат @var{string} в своих заголовках.
Если есть более чем один такой элемент, Maxima спросит пользователя выбрать
элемент или несколько элементов для отображения.

В интерактивном приглашении, @code{? foo} (с пробелом между @code{?} и @code{foo})
эквивалентно @code{describe("foo", exact)}, и @code{?? foo} эквивалентно 
@code{describe("foo", inexact)}.

@code{describe("", inexact)} дает список всех тем, документированных в руководстве пользователя.

@code{describe} не вычисляет свой аргумент.
@code{describe} возвращает @code{true} если документация найдена, @code{false} в противном случае.

См. также @ref{Документация}.

Пример:

@example
(%i1) ?? integ
 0: Functions and Variables for Elliptic Integrals
 1: Functions and Variables for Integration
 2: Introduction to Elliptic Functions and Integrals
 3: Introduction to Integration
 4: askinteger  (Functions and Variables for Simplification)
 5: integerp  (Functions and Variables for Miscellaneous Options)
 6: integer_partitions  (Functions and Variables for Sets)
 7: integrate  (Functions and Variables for Integration)
 8: integrate_use_rootsof  (Functions and Variables for
    Integration)
 9: integration_constant_counter  (Functions and Variables for
    Integration)
 10: nonnegintegerp  (Functions and Variables for linearalgebra)
Enter space-separated numbers, `all' or `none': 7 8

 -- Function: integrate (<expr>, <x>)
 -- Function: integrate (<expr>, <x>, <a>, <b>)
     Attempts to symbolically compute the integral of <expr> with
     respect to <x>.  `integrate (<expr>, <x>)' is an indefinite
     integral, while `integrate (<expr>, <x>, <a>, <b>)' is a
     definite integral, [...]
     
 -- Option variable: integrate_use_rootsof
     Default value: `false'

     When `integrate_use_rootsof' is `true' and the denominator of
     a rational function cannot be factored, `integrate' returns
     the integral in a form which is a sum over the roots (not yet
     known) of the denominator.
     [...]
@end example

В этом примере, были выбраны элементы 7 и 8
(вывод команды сокращен, что обозначено @code{[...]}).
Все элементы или ни один из элементов могут быть выбраны при помощи @code{all} 
или @code{none}, что можно также сократить до @code{a} и @code{n} соотвественно.

@opencatbox
@category{Работа в консоли} @category{Справка}
@closecatbox

@end deffn

@deffn {Функция} example (@var{topic})
@deffnx {Функция} example ()
@code{example (@var{topic})} показывает некоторые примеры для символа @var{topic} (не строки).
Большинство @var{topic} являются именами функций.
@code{example ()} возвращает список всех доступных @var{topic}.

Имя файла содержащего эти примеры задано глобальной переменной @code{manual_demo}, 
которая исходно равна @code{"manual.demo"}.

@code{example} не вычисляет свой аргумент.
@code{example} возвращает @code{done}
только если нет ошибки или отсутствия аргумента. 
@code{example} возвращает список всех подходящих тем.

Примеры:

@example
(%i1) example (append);
(%i2) append([x+y,0,-3.2],[2.5E+20,x])
(%o2)             [y + x, 0, - 3.2, 2.5E+20, x]
(%o2)                         done
(%i3) example (coeff);
(%i4) coeff(b+tan(x)+2*a*tan(x) = 3+5*tan(x),tan(x))
(%o4)                      2 a + 1 = 5
(%i5) coeff(1+x*%e^x+y,x,0)
(%o5)                         y + 1
(%o5)                         done
@end example

@opencatbox
@category{Работа в консоли}
@closecatbox

@end deffn

