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

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.

  Категории:Debugging ·Evaluation ·

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

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

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

  Категории:Вычисление ·Глобальные переменные ·

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