Previous: Введение в командную строку, Up: Командная строка   [Contents][Index]

4.2 Функции и переменные для работы в командной строке

Функция: alias (new_name_1, old_name_1, ..., new_name_n, old_name_n)

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

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

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

Если во время работы Maxima возникла ошибка, Maxima запускает отладчик если значение переключателя debugmode равно true. В отладчике пользователь может исследовать значения стека, установить точки останова, просматривать код и т.д. См. debugging для списка команд отладчика.

Отладчик Maxima, включаемый с помощью debugmode, не обрабатывает ошибки на уровне Lisp.

Функция: ev (expr, arg_1, ..., arg_n)

Вычисляет выражение expr в окружении определяемом аргументами arg_1, ..., arg_n. Данные аргументы могут быть переключателями (логические флаги), присваиваниями, уравнениями и функциями. ev возвращает результат вычисления (выражение).

Вычисление осуществляется в несколько шагов.

  1. Сначала окружение устанавливается в соответствии с аргументами, которые могут быть одним из следующего:
    • simp вызывает упрощение выражения expr вне зависимости от текущего значения переключателя simp (отключает упрощение если равен false).
    • noeval отключает вычисление для данной стадии ev (см. шаг (4) ниже). Это может быть полезно в комбинации с другими переключателями и вызывает повторное упрощение expr без перевычисления.
    • nouns вызывает вычисление невычисляемых (noun) форм (обычно это невычисляемые функции, такие как 'integrate или 'diff) в expr.
    • expand вызывает раскрытие скобок.
    • expand (m,n) вызывает раскрытие скобок при maxposex и maxnegex равным m и n соответственно.
    • detout при вычислении обратных матриц в expr, сохраняет определитель матрицы как общий множитель вместо того чтобы делить на него каждый элемент матрицы в отдельности.
    • diff вызывает вычисление всех производных в expr.
    • derivlist (x, y, z, ...) вызовет вычисление производных только относительно указанных переменных.
    • float вызывает преобразование нецелых рациональных чисел в числа с плавающей точкой.
    • numer вызывает численное вычисление математических функций (включая экспоненты), имеющих числовые аргументы. Вызывает замену переменных, имеющих числовые значения (см. numerval), этими значениями. Устанавливает значение переключателя float равным true.
    • pred вызывает вычисление предикатов (выражений, значение которых true или false).
    • eval вызывает дополнительное пост-вычисление expr (см. шаг (5) ниже). eval может встречаться несколько раз. Для каждого eval выражение вычисляется еще раз.
    • A, где A есть атом, являющийся флагом вычисления (см. evflag), устанавливает значение A равным true в процессе вычисления expr.
    • V: expression (или альтернативно V=expression) присваивает V значение expression в процессе вычисления expr. Если V является управляющей переменной (опцией) Maxima, тогда значение expression используется в качестве значения опции в процессе вычисления expr. Если имеется более одного аргумента ev данного типа, то присваивание осуществляется параллельно. Если V является не атомарным выражением, то вместо присваивания осуществляется подстановка.
    • F, где F есть имя функции, являющейся функцией вычисления (см. evfun) вызывает применение F к expr.
    • Любые другие имена функций (скажем sum) вызывают вычисление этих функций в expr, так как если бы они имели вычисляемую форму.
    • Кроме того, встречающаяся в expr функция (скажем F(x)) может быть локально определена для вычисления expr, путем задания аргумента в форме F(x) := expression.
    • Если в качестве аргумента указан любой, не указанный выше атом, или переменная с индексом, или выражение с индексом, то данный аргумент вычисляется. Если результатом вычисления является уравнение или присваивание, то выполняется соответствующее присваивание или подстановка. Если результатом вычисления является список, то элементы этого списка трактуются как дополнительные аргументы ev. Это, в частности, позволяет использовать список уравнений (например [X=1, Y=A**2]), или список имен уравнений (например [%t1, %t2], где %t1 и %t2 являются результатом работы функции solve.

    Аргументы ev могут быть указаны в произвольном порядке за исключением уравнений, которые выполняются последовательно слева направо, и составных вычисляющих функций (например ev (expr, ratsimp, realpart) выполняется как realpart (ratsimp (expr))).

    Переключатели simp, numer, float и pred могут быть установлены локально в блоке, или глобально. В последнем случае они будут действовать до переопределения.

    Если выражение expr является каноническим рациональным выражением (КРВ, canonical rational expression (CRE)), тогда результатом ev тоже является КРВ, если только переключатели numer и float оба не равны true.

  2. На шаге (1), составляется список не-индексированных переменных входящих в левые части аргументов, являющихся уравнениями, или в значения аргументов, если эти значения являются уравнениями. Переменные (индексированные, которые не имеют соответствующих функций массивов, и не-индексированные) в выражении expr заменяются на свои глобальные значения, за исключением тех, которые входят в вышеуказанный список. Обычно, expr это просто метка % (как %i2 в примере ниже), так что на данном шаге просто получается выражение, обозначаемое данной меткой.
  3. Если среди аргументов имеются подстановки, то они выполняются.
  4. Полученное выражение снова вычисляется (если одним из аргументов не является noeval) и упрощается в соответствии с заданными аргументами. Все вызовы функций в expr выполняются после вычисления переменных. Таким образом ev(F(x)) трактуется как F(ev(x)).
  5. Для каждого eval, шаги (3) и (4) повторяются.

Примеры:

(%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
                                     d                    2
(%o1)              cos(y) + sin(x) + -- (sin(w)) + (w + 1)
                                     dw
(%i2) ev (%, sin, expand, diff, x=2, y=1);
                          2
(%o2)           cos(w) + w  + 2 w + cos(1) + 1.909297426825682

Имеется альтернативный синтаксис функции ev, который может использоваться только на верхнем уровне: аргументы ev() перечисляются через запятую после выражения. Т.е. можно просто написать

expr, arg_1, ..., arg_n

Такая конструкция недопустима как часть другого выражения, функции, блока и т.п.

Обратите внимание на параллельное присваивание в следующих примерах.

(%i3) programmode: false;
(%o3)                                false
(%i4) x+y, x: a+y, y: 2;
(%o4)                              y + a + 2
(%i5) 2*x - 3*y = 3$
(%i6) -3*x + 2*y = -4$
(%i7) solve ([%o5, %o6]);
Solution

                                          1
(%t7)                               y = - -
                                          5

                                         6
(%t8)                                x = -
                                         5
(%o8)                            [[%t7, %t8]]
(%i8) %o6, %o8;
(%o8)                              - 4 = - 4
(%i9) x + 1/x > gamma (1/2);
                                   1
(%o9)                          x + - > sqrt(%pi)
                                   x
(%i10) %, numer, x=1/2;
(%o10)                      2.5 > 1.772453850905516
(%i11) %, pred;
(%o11)                               true
Свойство: evflag

Если символ x имеет свойство evflag, то выражения ev(expr, x) и expr, x (в интерактивной командной строке) эквивалентны ev(expr, x = true). Т.е. x имеет значение true в процессе вычисления expr.

Выражение declare(x, evflag) устанавливает свойство evflag для переменной x.

Следующие переключатели имеют по умолчанию свойство evflag: algebraic, cauchysum, demoivre, dotscrules, %emode, %enumer, exponentialize, exptisolate, factorflag, float, halfangles, infeval, isolate_wrt_times, keepfloat, letrat, listarith, logabs, logarc, logexpand, lognegint, lognumer, m1pbranch, numer_pbranch, programmode, radexpand, ratalgdenom, ratfac, ratmx, ratsimpexpons, simp, simpsum, sumexpand и trigexpand.

Примеры:

(%i1) sin (1/2);
                                 1
(%o1)                        sin(-)
                                 2
(%i2) sin (1/2), float;
(%o2)                   0.479425538604203
(%i3) sin (1/2), float=true;
(%o3)                   0.479425538604203
(%i4) simp : false;
(%o4)                         false
(%i5) 1 + 1;
(%o5)                         1 + 1
(%i6) 1 + 1, simp;
(%o6)                           2
(%i7) simp : true;
(%o7)                         true
(%i8) sum (1/k^2, k, 1, inf);
                            inf
                            ====
                            \     1
(%o8)                        >    --
                            /      2
                            ====  k
                            k = 1
(%i9) sum (1/k^2, k, 1, inf), simpsum;
                                 2
                              %pi
(%o9)                         ----
                               6
(%i10) declare (aa, evflag);
(%o10)                        done
(%i11) if aa = true then YES else NO;
(%o11)                         NO
(%i12) if aa = true then YES else NO, aa;
(%o12)                         YES
Свойство: evfun

Если функция F имеет свойство evfun, то выражения ev(expr, F) и expr, F (в интерактивной командной строке) эквивалентны F(ev(expr)).

Если заданы две или более evfun функций F, G, то функции применяются в порядке задания.

Выражение declare(F, evfun) устанавливает свойство evfun для функции F.

Следующие функции имеют по умолчанию свойство evfun: bfloat, factor, fullratsimp, logcontract, polarform, radcan, ratexpand, ratsimp, rectform, rootscontract, trigexpand и trigreduce.

Примеры:

(%i1) x^3 - 1;
                              3
(%o1)                        x  - 1
(%i2) x^3 - 1, factor;
                                2
(%o2)                 (x - 1) (x  + x + 1)
(%i3) factor (x^3 - 1);
                                2
(%o3)                 (x - 1) (x  + x + 1)
(%i4) cos(4 * x) / sin(x)^4;
                            cos(4 x)
(%o4)                       --------
                               4
                            sin (x)
(%i5) cos(4 * x) / sin(x)^4, trigexpand;
                 4           2       2         4
              sin (x) - 6 cos (x) sin (x) + cos (x)
(%o5)         -------------------------------------
                                4
                             sin (x)
(%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
                           2         4
                      6 cos (x)   cos (x)
(%o6)               - --------- + ------- + 1
                          2          4
                       sin (x)    sin (x)
(%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
                           2         4
                      6 cos (x)   cos (x)
(%o7)               - --------- + ------- + 1
                          2          4
                       sin (x)    sin (x)
(%i8) declare ([F, G], evfun);
(%o8)                         done
(%i9) (aa : bb, bb : cc, cc : dd);
(%o9)                          dd
(%i10) aa;
(%o10)                         bb
(%i11) aa, F;
(%o11)                        F(cc)
(%i12) F (aa);
(%o12)                        F(bb)
(%i13) F (ev (aa));
(%o13)                        F(cc)
(%i14) aa, F, G;
(%o14)                      G(F(cc))
(%i15) G (F (ev (aa)));
(%o15)                      G(F(cc))
Управляющая переменная: infeval

Включает режим "бесконечного вычисления". ev вычисляет выражение повторно до тех пор пока оно не перестает изменяться. Чтобы предотвратить вычисление отдельной переменной, скажем X, в данном режиме следует указать X='X в качестве аргумента ev. Разумеется, выражения вроде ev (X, X=X+1, infeval) приводят к бесконечному циклу.

Функция: kill (a_1, ..., a_n)
Функция: kill (labels)
Функция: kill (inlabels, outlabels, linelabels)
Функция: kill (n)
Функция: kill ([m, n])
Функция: kill (values, functions, arrays, ...)
Функция: kill (all)
Функция: kill (allbut (a_1, ..., a_n))

Удаляет все связи (значение, функцию, массив или правило) аргументов a_1, ..., a_n. Аргумент a_k может быть символом или отдельным элементом массива. Если a_k является отдельным элементом массива, то kill удаляет значение одного этого элемента и не затрагивает другие элементы массива.

Распознается несколько специальных форм аргументов. При этом аргументы различных типов могут быть скомбинированы, например kill (inlabels, functions, allbut (foo, bar)).

kill (labels) очищает значение меток ввода, результата и меток промежуточных выражений, определенных на момент вызова. kill (inlabels) очищает значение меток ввода, имена которых начинаются с текущего значения inchar. Аналогично, kill (outlabels) очищает значение меток результата, имена которых начинаются с текущего значения outchar, и kill (linelabels) очищает значение меток промежуточных выражений, имена которых начинаются с текущего значения linechar.

kill (n), где n является целым числом, очищает значение n первых меток ввода и результата.

kill ([m, n]) очищает метки ввода и результата с номерами от m до n включительно.

kill (infolist), где infolist есть один из информационных списков infolists (например values, functions или arrays), очищает значение всех элементов в infolist. См. также infolists.

kill (all) очищает значения всех элементов во всех информационных списках (infolists). kill (all) не восстанавливает стандартные значения глобальных переменных. См. reset по поводу восстановления стандартных значений глобальных переменных.

kill (allbut (a_1, ..., a_n)) очищает все элементы во всех информационных списках кроме a_1, ..., a_n. kill (allbut (infolist)) очищает все элементы кроме тех, которые принадлежат информационному списку infolist, где infolist есть values, functions, arrays и т.д.

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

Функция kill не вычисляет свои аргументы. Для их вычисления можно использовать оператор кавычка-кавычка ''.

kill (symbol) очищает все свойства символа symbol в отличии от remvalue, remfunction, remarray и remrule, которые очищают только определенное свойство.

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

Функция: labels (symbol)
Системная переменная: labels

Возвращает список меток ввода, результата или меток промежуточных выражений, имена которых начинаются с символа symbol. Обычно symbol это значение inchar, outchar или linechar. Значение symbol может быть указано с или без знака процента, например i и %i дадут одинаковый результат.

Если ни одна из меток не начинается с symbol, то возвращается пустой список.

Функция labels не вычисляет свои аргументы. Для их вычисления можно использовать оператор кавычка-кавычка ''. Например, labels (''inchar) возвращает список меток ввода, имена которых начинаются с текущего значения символа ввода.

Переменная labels есть список всех меток ввода, результата и меток промежуточных выражений, включая все предыдущие метки если значение inchar, outchar или linechar изменялось.

По умолчанию Maxima выводит результат каждого входного выражения присваивая ему результирующую метку. Печать результата можно подавить используя для окончания выражения символ $ вместо обычного ;. В этом случае метка результата создается но сам результат вычисления не печатается. Тем не менее значение метки результата запоминается и в дальнейшем может быть использовано как обычно. См. также %, %% и %th.

Метки промежуточных выражений создаются некоторыми функциями. Переключатель programmode определяет будет ли команда solve, и некоторые другие функции, создавать промежуточные метки или возвращать список выражений. Некоторые другие функции, такие как ldisplay, всегда создают метки промежуточных выражений.

См. также inchar, outchar, linechar и infolists.

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

Порядковый номер текущей пары входного и результирующего выражений.

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

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

myoptions есть список всех переключателей (флагов) переопределенных пользователем вне зависимости от того имеет ли в данный момент переключатель значение по умолчанию или нет.

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

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

Если nolabels равна true, то метки ввода и результата (%i и %o, соответственно) печатаются но результирующее значение этим меткам не присваивается а сами метки не добавляются к списку labels. Поскольку результаты вычислений не присваиваются меткам, то сборщик мусора может освободить занимаемую ими память для дальнейшего использования.

В противном случае меткам ввода и меткам результата присваиваются соответствующие значения а сами метки добавляются к списку labels.

Флаг nolabels не влияет на метки промежуточных выражений (%t). Независимо от значения nolabels равного true или false, меткам промежуточных выражений присваиваются значение и они добавляются к списку labels.

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

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

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

Если optionset равно true, Maxima печатает сообщение при изменении значения любого переключателя (опция, флаг) Maxima. Это может быть полезно, когда пользователь не уверен в написании названия опции и хочет быть уверен, что он переопределил значение правильной переменной.

Функция: playback ()
Функция: playback (n)
Функция: playback ([m, n])
Функция: playback ([m])
Функция: playback (input)
Функция: playback (slow)
Функция: playback (time)
Функция: playback (grind)

Выводит значения входных, результирующих и промежуточных выражений без их перевычисления. playback выводит только выражения связанные с метками – любой другой вывод (текст выведенный print или describe, сообщения об ошибках) не отображается. См. также labels.

Функция playback не вычисляет свои аргументы. Для их вычисления можно использовать оператор кавычка-кавычка ''. playback возвращает значение done.

playback () (без аргументов) печатает все входные, результирующие и промежуточные выражения. Результирующие выражения печатаются даже в случае, когда во время первоначальных вычислений использовался $ для подавления печати результата.

playback (n) печатает n последних выражений. Каждое входное, результирующее и промежуточное выражение считается за одно.

playback ([m, n]) печатает входные, результирующие и промежуточные выражения с номерами от m до n включительно.

playback ([m]) эквивалентно playback ([m, m]) и обычно печатает одну пару из входного и результирующего выражений.

playback (input) печатает все входные выражения.

playback (slow) останавливается между выражениями и ожидает пока пользователь нажмет "ввод" (enter). Данное поведение аналогично команде demo. playback (slow) полезно в сочетании с save или stringout для выбора выражений, которые надо сохранить в файле.

playback (time) показывает время вычисления для каждого выражения.

playback (grind) печатает входные выражения в формате функции grind. На результирующие выражения данная опция не влияет. См. grind.

Аргументы функции playback могут быть скомбинированы, например playback ([5, 10], grind, time, slow).

Функция: printprops (a, i)
Функция: printprops ([a_1, ..., a_n], i)
Функция: printprops (all, i)

Печатает свойство с именем i, ассоциированное с атомом a. a может быть списком атомов или all. В последнем случае будут использованы все атомы имеющие данное свойство. Например, printprops ([f, g], atvalue). Функция printprops предназначена для свойств, которые не могут быть отображены другим способом, например для atvalue, atomgrad, gradef и matchdeclare.

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

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

prompt символ приглашения для функции demo, playback (slow) и диалога прерывания Maxima (break loop) (см. break).

Функция: quit ()

Завершает сессию Maxima. Команда должна быть введена именно как quit(); или quit()$, а не просто quit.

Для прерывания длительных вычислений можно нажать control-C. При этом по умолчанию Maxima возвращается на верхний уровень к приглашению ввода следующей команды. Если значение Lisp-переменной *debugger-hook* равно nil, тогда нажатие control-C запускает Lisp отладчик. См. также debugging.

Функция: remfunction (f_1, ..., f_n)
Функция: remfunction (all)

Удаляет определенные пользователем функции f_1, ..., f_n. Аргументы могут быть именами обычных функций, созданных при помощи := или define, или макро функций, созданных при помощи ::=.

remfunction (all) – удаляет все определенные пользователем функции.

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

remfunction возвращает список символов, для которых было удалено определение функции. Для символов, у которых не было соответствующих определений функций, возвращается false.

Функция remfunction не применима к функциям массивам и переменным с индексом, к этим типам функций применима remarray.

Функция: reset ()

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

reset восстанавливает значения переменных хранящихся в Lisp списке *variable-initial-values*. Lisp макрос defmvar добавляет переменные в этот список (вместе с выполнением других действий). Многие, но не все, глобальные переменные и опции определены с помощью defmvar; некоторые, определенные с помощью defmvar переменные, не являются глобальными переменными или опциями.

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

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

Если showtime равно true Maxima печатает время вычисления для каждого результирующего выражения.

Время вычисления всегда запоминается, так что time и playback могут показать это время даже если showtime равно false.

См. также timer.

Функция: sstatus (feature, package)

Устанавливает статус feature в package. После выполнения sstatus (feature, package), status (feature, package) возвращает true. Этот механизм может быть полезен при работе с пакетами для того, чтобы иметь возможность проверять какие опции пакета загружены.

Функция: to_lisp ()

Запускает интерпретатор используемой Lisp системы. Lisp функция (to-maxima) возвращает на уровень командной строки Maxima.

Function: eval_string_lisp (str)

Sequentially read lisp forms from the string str and evaluate them. Any values produced from the last form are returned as a Maxima list.

Examples:

(%i1) eval_string_lisp ("");
(%o1) []
(%i2) eval_string_lisp ("(values)");
(%o2) []
(%i3) eval_string_lisp ("69");
(%o3) [69]
(%i4) eval_string_lisp ("1 2 3");
(%o4) [3]
(%i5) eval_string_lisp ("(values 1 2 3)");
(%o5) [1,2,3]
(%i6) eval_string_lisp ("(defun $foo (x) (* 2 x))");
(%o6) [foo]
(%i7) foo (5);
(%o7) 10

See also eval_string.

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

Начальное значение: []

values содержит список всех пользовательских переменных, которым присвоено значение (не Maxima опций и переключателей). Этот список состоит из символов, которым было присвоено значение при помощи операторов :, :: или :=.


Previous: Введение в командную строку, Up: Командная строка   [Contents][Index]