@c Language=Russian
@c Encoding=UTF-8
@c File=Miscellaneous.texi 
@c OriginalRevision=1.25
@c TranslatedBy: (c) 2007-06 Vadim V. Zhytnikov <vvzhyt@gmail.com>

@menu
* Введение в вспомогательные опции::  
* Библиотека Share::                       
* Вспомогательные функции и переменные::  
@end menu

@node Введение в вспомогательные опции, Библиотека Share, Вспомогательные опции, Вспомогательные опции
@section Введение в вспомогательные опции

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

@node Библиотека Share, Вспомогательные функции и переменные, Введение в вспомогательные опции, Вспомогательные опции
@section Библиотека Share

Maxima директория "share" содержит программы и другие полезные для
пользователей Maxima файлы, не входящие в ядро системы. 
Обычно, эти программы загружаются с помощью команд @code{load} или @code{setup_autoload}.

@code{:lisp *maxima-sharedir*} указывает расположение директории "share"
в файловой системе.

@c FIXME FIXME FIXME -- WE REALLY NEED AN UP-TO-DATE LIST OF SHARE PACKAGES !!
Команда @code{printfile ("share.usg")} печатает устаревший список пакетов share.
Возможно, более информативным будет просмотр этой директории при помощи 
обычного файл-менеджера.


@node Вспомогательные функции и переменные,  , Библиотека Share, Вспомогательные опции
@section Вспомогательные функции и переменные

@defvr {Системная переменная} aliases
Значение по умолчанию: @code{[]}

@code{aliases} -- список всех атомов, котрые имеют определенные пользователем алиасы (определяются
функциями @code{alias}, @code{ordergreat}, @code{orderless} или при декларации атома @code{noun} 
при помощи @code{declare}).

@opencatbox{Категории:}
@category{Факты и выводы}
@category{Глобальные переменные}
@closecatbox
@end defvr


@defvr {Декларация} alphabetic
@code{alphabetic} является декларацией типа, распознаваемой функцией @code{declare}.
Декларация @code{declare(@var{s}, alphabetic)} говорит Maxima рассматривать все 
символы, входящие в @var{s} (должен быть строкой), как буквенные.

См. также @ref{Идентификаторы}.

Пример:

@c ===beg===
@c xx\~yy\`\@ : 1729;
@c declare ("~`@", alphabetic);
@c xx~yy`@ + @yy`xx + `xx@@yy~;
@c listofvars (%);
@c ===end===
@example
(%i1) xx\~yy\`\@@ : 1729;
(%o1)                         1729
(%i2) declare ("~`@@", alphabetic);
(%o2)                         done
(%i3) xx~yy`@@ + @@yy`xx + `xx@@@@yy~;
(%o3)               `xx@@@@yy~ + @@yy`xx + 1729
(%i4) listofvars (%);
(%o4)                  [@@yy`xx, `xx@@@@yy~]
@end example


@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end defvr

@c REPHRASE
@c DOES apropos RETURN THE SAME THING AS THE LIST SHOWN BY describe ??
@deffn {Функция} apropos (@var{string})
Ищет имена объектов  Maxima, содержащие @var{string} в качестве подстроки.  
Например, вызов @code{apropos (exp)} возвращает список всех переменных и функций,
имеющих @code{exp} в качестве части своего имени, такие как @code{expand},
@code{exp} и @code{exponentialize}. Таким образом, если вы помните только часть имени
какого-либо объекта, то можете использовать эту команду для поиска полного
наименования.
Аналогично, можно использовать @code{apropos (tr_)}, для того, чтобы вывести 
список переключателей, влияющих на работу транслятора, т.к. 
имена большинства из них начинаются с @code{tr_}.

@opencatbox{Категории:}
@category{Справка}
@closecatbox
@end deffn

@deffn {Функция} args (@var{expr})
Возвращает список аргументов параметра @code{expr}, который может быть
любым отличным от атома выражением.
Возвращаются только аргументы оператора самого верхнего уровня.
Подвыражения @code{expr} появляются, как элементы подвыражений элементов
списка аргументов.

Порядок выражений в возвращаемом списке может зависеть от глобального флага @code{inflag}.

Вызов @code{args (@var{expr})} эквивалентен @code{substpart ("[", @var{expr}, 0)}.
См. также @code{substpart} и @code{op}.

@c NEEDS EXAMPLES
@opencatbox{Категории:}
@category{Выражения}
@closecatbox
@end deffn

@defvr {Управляющая переменная} genindex
Значение по умолчанию: @code{i}

@code{genindex} -- буквенный префикс, используемый для создания
новой переменной суммирования.

@opencatbox{Категории:}
@category{Суммы и произведения}
@closecatbox
@end defvr

@defvr {Управляющая переменная} gensumnum
Значение по умолчанию: 0

@code{gensumnum} -- числовой суффикс, используемый для создания новой переменной суммирования.  
Если равна @code{false}, то индекс будет состоять только из @code{genindex} 
без числового суффикса.

@opencatbox{Категории:}
@category{Суммы и произведения}
@closecatbox
@end defvr

@defvr {Системная переменная} infolists
Значение по умолчанию: @code{[]}

@code{infolists} -- есть список имен всех информационных списков Maxima. 
А именно:

@table @code
@item labels
Все имеющие значение @code{%i}, @code{%o} и @code{%t} метки.
@item values
Все имеющие значение атомы, определенные пользователем (не встроенные в Maxima
управляющие переменные и переключатели), созданные при помощи операторов @code{:}, @code{::}
или функциональным присваиванием.
@c WHAT IS INTENDED BY "FUNCTIONAL BINDING" HERE ??
@item functions
Все определенные пользователем функции, созданные при помощи @code{:=} или @code{define}.
@item arrays
Все объявленные и необъявленные массивы, созданные при помощи @code{:}, @code{::} или @code{:=}.
@c AREN'T THERE OTHER MEANS OF CREATING ARRAYS ??
@item macros
Все определенные пользователем макро-функции.
@item myoptions
Все управляющие переменные, значение которых было изменено
пользователем, независимо от того, имеют ли они в данный момент значения
по умолчанию или нет.
@item rules
Все определенные пользователем правила подстановок и правила упрощения, 
созданные при помощи @code{tellsimp}, @code{tellsimpafter}, @code{defmatch} или @code{defrule}.
@item aliases
Все атомы, имеющие определенные пользователем алиасы, созданные при помощи функций @code{alias},
@code{ordergreat}, @code{orderless} или при декларации атома @code{noun} с помощью @code{declare}.
@item dependencies
Все атомы, имеющие функциональные зависимости, созданные с помощью функций 
@code{depends} или @code{gradef}.
@item gradefs
Все функции, имеющие определенные пользователем производные, определенные при помощи функции
@code{gradef}.
@c UMM, WE REALLY NEED TO BE SPECIFIC -- WHAT DOES "ETC" CONTAIN HERE ??
@item props
Все атомы, имеющие свойства, отличные от упомянутых выше, такие как свойства
задаваемые @code{atvalue}, @code{matchdeclare} и т.п.,
а также, свойства, установленные функцией @code{declare}.
@item let_rule_packages
Все определенные пользователем пакеты правил @code{let} плюс специальный
пакет @code{default_let_rule_package}.
(@code{default_let_rule_package} -- имя пакета правил, который используется по умолчанию,
если иной не объявлен пользователем явно.)
@end table

@opencatbox{Категории:}
@category{Факты и выводы}
@category{Глобальные переменные}
@closecatbox
@end defvr

@deffn {Функция} integerp (@var{expr})
Возвращает @code{true}, если @var{expr} является буквальным целым числом, 
и @code{false} в противном случае.

Функция @code{integerp} возвращает @code{false}, если аргумент является символом,
даже если этот символ объявлен целочисленным.

Примеры:

@example
(%i1) integerp (0);
(%o1)                         true
(%i2) integerp (1);
(%o2)                         true
(%i3) integerp (-17);
(%o3)                         true
(%i4) integerp (0.0);
(%o4)                         false
(%i5) integerp (1.0);
(%o5)                         false
(%i6) integerp (%pi);
(%o6)                         false
(%i7) integerp (n);
(%o7)                         false
(%i8) declare (n, integer);
(%o8)                         done
(%i9) integerp (n);
(%o9)                         false
@end example

@opencatbox{Категории:}
@category{Функции предикаты}
@closecatbox
@end deffn

@defvr {Управляющая переменная} m1pbranch
Значение по умолчанию: @code{false}

@code{m1pbranch} определяет главную ветвь для отрицательной степени @code{-1}.
Величины, подобные @code{(-1)^(1/3)} (т.е. "нечетные" рациональные степени) и 
@code{(-1)^(1/4)} (т.е. "четные" рациональные степени) 
определяются следующим образом:

@c REDRAW THIS AS A TABLE
@example
              domain:real
                            
(-1)^(1/3):      -1         
(-1)^(1/4):   (-1)^(1/4)   

             domain:complex              
m1pbranch:false          m1pbranch:true
(-1)^(1/3)               1/2+%i*sqrt(3)/2
(-1)^(1/4)              sqrt(2)/2+%i*sqrt(2)/2
@end example

@opencatbox{Категории:}
@category{Выражения}
@category{Глобальные флаги}
@closecatbox
@end defvr

@deffn {Функция} numberp (@var{expr})
Возвращает @code{true}, если @var{expr} есть буквальное целое число, рациональное число, 
число с плавающей точкой или число с плавающей точкой высокой точности, 
иначе возвращается @code{false}.

Функция @code{numberp} возвращает @code{false}, если параметр является символом,
даже если он является символическим числом, таким как @code{%pi} или @code{%i},
или объявлен @code{even}, @code{odd}, @code{integer}, @code{rational}, @code{irrational}, 
@code{real}, @code{imaginary} или @code{complex}.

Примеры:

@example
(%i1) numberp (42);
(%o1)                         true
(%i2) numberp (-13/19);
(%o2)                         true
(%i3) numberp (3.14159);
(%o3)                         true
(%i4) numberp (-1729b-4);
(%o4)                         true
(%i5) map (numberp, [%e, %pi, %i, %phi, inf, minf]);
(%o5)      [false, false, false, false, false, false]
(%i6) declare (a, even, b, odd, c, integer, d, rational,
     e, irrational, f, real, g, imaginary, h, complex);
(%o6)                         done
(%i7) map (numberp, [a, b, c, d, e, f, g, h]);
(%o7) [false, false, false, false, false, false, false, false]
@end example

@opencatbox{Категории:}
@category{Функции предикаты}
@closecatbox
@end deffn

@c CROSS REF TO WHICH FUNCTION OR FUNCTIONS ESTABLISH PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@deffn {Функция} properties (@var{a})
Возвращает список имен всех свойств, ассоциированных
с атомом @var{a}.

@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@c CROSS REF TO WHICH FUNCTION OR FUNCTIONS ESTABLISH PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@c WHAT IS HIDDEN IN THE "etc" HERE ??
@defvr {Специальный символ} props
@code{props} -- список атомов, имеющих свойства отличные от тех, что явно 
перечислены в @code{infolists}, такие как, свойства, задаваемые @code{atvalue}, 
@code{matchdeclare} и т.п., а также свойства, задаваемые функцией @code{declare}.

@opencatbox{Категории:}
@category{Факты и выводы}
@category{Глобальные переменные} 
@closecatbox
@end defvr

@c CROSS REF TO WHICH FUNCTION OR FUNCTIONS ESTABLISH PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@deffn {Функция} propvars (@var{prop})
Возвращает список атомов из списка @code{props}, которые имеют 
свойство, обозначаемое @var{prop}.  Т.е. @code{propvars (atvalue)}
возвращает список атомов, имеющих свойство @code{atvalue}.

@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@c CROSS REF TO OTHER FUNCTIONS WHICH PUT/GET PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@c ARE PROPERTIES ESTABLISHED BY put THE SAME AS PROPERTIES ESTABLISHED BY declare OR OTHER FUNCTIONS ??
@c IS put (foo, true, integer) EQUIVALENT TO declare (foo, integer) FOR EXAMPLE ??
@deffn {Функция} put (@var{atom}, @var{value}, @var{indicator})
Присваивает атому @var{atom} значение  свойства @var{indicator}, равное @var{value}.
@var{indicator} может быть не только системным свойством, но любым другим именем
свойства.

Функция @code{put} вычисляет свои аргументы. 
@code{put} возвращает @var{value}.

Примеры:

@example
(%i1) put (foo, (a+b)^5, expr);
                                   5
(%o1)                       (b + a)
(%i2) put (foo, "Hello", str);
(%o2)                         Hello
(%i3) properties (foo);
(%o3)            [[user properties, str, expr]]
(%i4) get (foo, expr);
                                   5
(%o4)                       (b + a)
(%i5) get (foo, str);
(%o5)                         Hello
@end example

@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@deffn {Функция} qput (@var{atom}, @var{value}, @var{indicator})
Присваивает атому @var{atom} значение  свойства @var{indicator}, равное @var{value}.
Аналогично @code{put}, но не вычисляет свои аргументы.

Примеры:

@example
(%i1) foo: aa$ 
(%i2) bar: bb$
(%i3) baz: cc$
(%i4) put (foo, bar, baz);
(%o4)                          bb
(%i5) properties (aa);
(%o5)                [[user properties, cc]]
(%i6) get (aa, cc);
(%o6)                          bb
(%i7) qput (foo, bar, baz);
(%o7)                          bar
(%i8) properties (foo);
(%o8)            [value, [user properties, baz]]
(%i9) get ('foo, 'baz);
(%o9)                          bar
@end example

@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@c CROSS REF TO OTHER FUNCTIONS WHICH PUT/GET PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@c HOW DOES THIS INTERACT WITH declare OR OTHER PROPERTY-ESTABLISHING FUNCTIONS ??
@c HOW IS THIS DIFFERENT FROM remove ??
@deffn {Функция} rem (@var{atom}, @var{indicator})
Удаляет свойство @var{indicator} у атома @var{atom}.

@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@c CROSS REF TO OTHER FUNCTIONS WHICH PUT/GET PROPERTIES !! (VERY IMPORTANT)
@c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
@c HOW DOES THIS INTERACT WITH declare OR OTHER PROPERTY-ESTABLISHING FUNCTIONS ??
@c HOW IS THIS DIFFERENT FROM rem ??
@deffn {Функция} remove (@var{a_1}, @var{p_1}, ..., @var{a_n}, @var{p_n})
@deffnx {Функция} remove ([@var{a_1}, ..., @var{a_m}], [@var{p_1}, ..., @var{p_n}], ...)
@deffnx {Функция} remove ("@var{a}", operator)
@deffnx {Функция} remove (@var{a}, transfun)
@deffnx {Функция} remove (all, @var{p})
Удаляет свойства, ассоциированные с атомами.

Вызов @code{remove (@var{a_1}, @var{p_1}, ..., @var{a_n}, @var{p_n})}
удаляет свойство @code{p_k} у атома @code{a_k}.

Вызов @code{remove ([@var{a_1}, ..., @var{a_m}], [@var{p_1}, ..., @var{p_n}], ...)}
удаляет свойства @code{@var{p_1}, ..., @var{p_n}}
у атомов @var{a_1}, ..., @var{a_m}.
Может быть более чем одна пара списков.

@c VERIFY THAT THIS WORKS AS ADVERTISED
Вызов @code{remove (all, @var{p})} удаляет все свойства @var{p} у всех имеющих его атомов.

@c SHOULD REFER TO A LIST OF ALL SYSTEM-DEFINED PROPERTIES HERE.
Удаляемые свойства могут быть как системными, такими как 
@code{function}, @code{macro} или @code{mode_declare}, так и пользовательскими.

@c VERIFY THAT THIS WORKS AS ADVERTISED
@c IS transfun PECULIAR TO remove ?? IF SO, SHOW SPECIAL CASE AS @defunx
Удаление свойства @code{transfun} удаляет транслированный Lisp вариант функции.
После удаления этого свойства, вместо транслированной Lisp версии функции будет 
выполняться Maxima версия.

Вызов @code{remove ("@var{a}", operator)} или, эквивалентно, @code{remove ("@var{a}", op)},
удаляет у @var{a} операторные свойства, декларированные функциями @code{prefix}, @code{infix}, 
@code{nary}, @code{postfix}, @code{matchfix} или @code{nofix}.
Отметим, что имя оператора должно быть записано в виде строки с двойными кавычками.

@code{remove} всегда возвращает @code{done}, независимо от того, имел ли атом  
требуемое свойство или нет.
Такое поведение отличается от более специфичных функций, удаляющих свойства, таких как 
@code{remvalue}, @code{remarray}, @code{remfunction} и @code{remrule}.

@c IN SERIOUS NEED OF EXAMPLES HERE
@opencatbox{Категории:}
@category{Факты и выводы}
@closecatbox
@end deffn

@c NEEDS EXAMPLES
@deffn {Функция} remvalue (@var{name_1}, ..., @var{name_n})
@deffnx {Функция} remvalue (all)
Удаляет из системы значения пользовательских переменных @var{name_1}, ..., @var{name_n}
(могут быть переменными с индексом).

Вызов @code{remvalue (all)} удаляет все значения всех переменных из списка определенных
пользователем переменных @code{values} (в отличии от переменных, автоматически определенных
Maxima).

См. также @code{values}.

@opencatbox{Категории:}
@category{Вычисление}
@closecatbox
@end deffn

@c NEEDS EXAMPLES
@anchor{rncombine}
@deffn {Функция} rncombine (@var{expr})
Преобразует выражение @var{expr}, комбинируя слагаемые @var{expr}, имеющие
одинаковые знаменатели или знаменатели отличающиеся только на числовой множитель.
Это поведение несколько отличается от поведения функции @code{combine}, 
которая собирает члены с идентичными знаменателями.

Устанавливая @code{pfeformat: true} и используя @code{combine}, можно получить результат
более компактный, чем дает @code{rncombine}, но @code{rncombine} выполняет
дополнительный шаг, перемножая численные множители знаменателей.
Это приводит к более ясной форме и возможности распознать сокращения.

Команда @code{load("rncomb")} загружает эту функцию.

@opencatbox{Категории:}
@category{Выражения}
@closecatbox
@end deffn

@c NEEDS CLARIFICATION AND EXAMPLES
@deffn {Функция} scalarp (@var{expr})
Возвращает @code{true} если @var{expr} является числом, константой или переменной,
объявленной @code{scalar} при помощи @code{declare}, или выражением, полностью состоящим
из чисел, констант и скалярных переменных, но не содержащим матрицы или списки.

@opencatbox{Категории:}
@category{Функции предикаты}
@category{Векторы}
@category{Матрицы}
@closecatbox
@end deffn

@deffn {Функция} setup_autoload (@var{filename}, @var{function_1}, ..., @var{function_n})
Определяет то, что если любая из функций @var{function_1}, ..., @var{function_n} 
вызывается, но еще не определена в момент вызова, то файл @var{filename} загружается 
при помощи @code{load}.
Файл @var{filename} обычно содержит определения указанных функций,
хотя это и не обязательно.

@code{setup_autoload} не работает для функций-массивов.

@code{setup_autoload} не вычисляет свои аргументы.

Примеры:

@c EXAMPLE GENERATED FROM FOLLOWING INPUT
@c legendre_p (1, %pi);
@c setup_autoload ("specfun.mac", legendre_p, ultraspherical);
@c ultraspherical (2, 1/2, %pi);
@c legendre_p (1, %pi);
@c legendre_q (1, %pi);
@example
(%i1) legendre_p (1, %pi);
(%o1)                  legendre_p(1, %pi)
(%i2) setup_autoload ("specfun.mac", legendre_p, ultraspherical);
(%o2)                         done
(%i3) ultraspherical (2, 1/2, %pi);
Warning - you are redefining the Macsyma function ultraspherical
Warning - you are redefining the Macsyma function legendre_p
                            2
                 3 (%pi - 1)
(%o3)            ------------ + 3 (%pi - 1) + 1
                      2
(%i4) legendre_p (1, %pi);
(%o4)                          %pi
(%i5) legendre_q (1, %pi);
                              %pi + 1
                      %pi log(-------)
                              1 - %pi
(%o5)                 ---------------- - 1
                             2
@end example

@opencatbox{Категории:}
@category{Определение функций}
@category{Ввод файлов}
@closecatbox
@end deffn

