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

Previous: Ведение в работу со списками, Up: Списки [Contents][Index]

### 35.2 Функции и переменные для работы со списками

Функция: append (list_1, ..., list_n)

  Возвращает новый список элементов list_1 с последующими элементами list_2 и т.д. `append` работает и с выражениями общего вида, например, `append (f(a,b), f(c,d,e));` дает `f(a,b,c,d,e)`.

  См. `example(append);` для примера.

  Категории:Списки ·Выражения ·

Функция: assoc (key, list, default)
Функция: assoc (key, list)

  Эта функция ищет ключ key в правых частях списка list, имеющего форму `[x,y,z,...]`, где каждый элемент list есть выражение с бинарным оператором и двумя операндами. Например, `x=1`, `2^3`, `[a,b]` и т.д. Ключ key сравнивается с первым операндом. Если ключ `key` найден, то `assoc` возвращает второй операнд. В противном случае возвращается значение default. Параметр default не обязателен и по умолчанию равен `false`.

  Категории:Списки ·Выражения ·

Функция: atom (expr)

  Возвращает `true` если expr является атомарным (т.е. число, имя или строка) и `false` в противном случае. Т.е. `atom(5)` равно `true`, тогда как `atom(a[1])` и `atom(sin(x))` равны `false` (предполагая, что `a[1]` и `x` не имеют значения).

  Категории:Функции предикаты ·Выражения ·

Функция: cons (expr, list)

  Возвращает новый список, составленный из первого элемента равного expr с последующими элементами list. Функция `cons` работает и с произвольными выражениями, например, `cons(x, f(a,b,c));` -> `f(x,a,b,c)`.

  Категории:Списки ·Выражения ·

Функция: copylist (list)

  Возвращает копию списка list.

  Категории:Списки ·

Функция: create_list (form, x_1, list_1, ..., x_n, list_n)

  Создает список, вычисляя выражение form с x_1 последовательно равным элементам list_1, x_2 последовательно равным элементам list_2 и т.д. Общее число элементов в результирующем списке равно произведению числа элементов во всех списках. Каждая переменная x_i должна быть символом. Переменные не вычисляются. Списки вычисляются однажды в начале итерации.

      (%i1) create_list(x^i,i,[1,3,7]);
                       3   7
      (%o1)       [x, x , x ]

  Двойная итерация:

      (%i1) create_list([i,j],i,[a,b],j,[e,f,h]);
      (%o1) [[a, e], [a, f], [a, h], [b, e], [b, f], [b, h]]

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

      (%i1) create_list([i,j],i,[1,2,3],j,1,i);
      (%o1) [[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]]

  Отметим, что пределы для переменной `j` могут зависеть от `i`.

  Категории:Списки ·

Функция: delete (expr_1, expr_2)
Функция: delete (expr_1, expr_2, n)

  Удаляет все элементы, равные expr_1, из expr_2. При этом expr_1 может быть слагаемым expr_2 (если это сумма) или множителем expr_2 (если это произведение).

      (%i1) delete(sin(x), x+sin(x)+y);
      (%o1)                         y + x

  Вызов `delete(expr_1, expr_2, n)` удаляет первые n случаев expr_1 из expr_2. Если число включений expr_1 в expr_2 меньше n, то будут удалены все.

      (%i1) delete(a, f(a,b,c,d,a));
      (%o1)                      f(b, c, d)
      (%i2) delete(a, f(a,b,a,c,d,a), 2);
      (%o2)                     f(b, c, d, a)

  Категории:Списки ·Выражения ·

Функция: eighth (expr)

  Возвращает восьмой элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: endcons (expr, list)

  Возвращает новый список, состоящий из элементов `list` с последующим expr. Функция `endcons` работает и с общими выражениями, например, `endcons(x, f(a,b,c));` -> `f(a,b,c,x)`.

  Категории:Списки ·Выражения ·

Функция: fifth (expr)

  Возвращает пятый элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: first (expr)

  Возвращает первый элемент expr, что может быть первым элементом списка, первой строкой в матрице, первым слагаемым суммы и т.д. Заметим, что `first` и другие подобные функции, такие как `rest` и `last`, работают с внешней (печатной) формой выражения expr, а не с тем, как это выражение было введено. Если значение `inflag` равно `true`, то эти функции будут работать с внутренним представлением выражения expr. Отметим, что упрощатель изменяет порядок членов в выражениях. Так, `first(x+y)` будет равно `x`, если `inflag` равна `true`, и `y`, если `inflag` равна `false` (`first(y+x)` даст одинаковый результат в обоих случаях). Функции `second` .. `tenth` дают со второго по десятый элемент выражения.

  Категории:Списки ·Выражения ·

Функция: fourth (expr)

  Возвращает четвертый элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: get (a, i)

  Возвращает определенное пользователем свойство атома a, обозначенное i, или `false`, если атом не имеет свойства i.

  Функция `get` вычисляет свои аргументы.

      (%i1) put (%e, 'transcendental, 'type);
      (%o1)                    transcendental
      (%i2) put (%pi, 'transcendental, 'type)$
      (%i3) put (%i, 'algebraic, 'type)$
      (%i4) typeof (expr) := block ([q],
              if numberp (expr)
              then return ('algebraic),
              if not atom (expr)
              then return (maplist ('typeof, expr)),
              q: get (expr, 'type),
              if q=false
              then errcatch (error(expr,"is not numeric.")) else q)$
      (%i5) typeof (2*%e + x*%pi);
      x is not numeric.
      (%o5)  [[transcendental, []], [algebraic, transcendental]]
      (%i6) typeof (2*%e + %pi);
      (%o6)     [transcendental, [algebraic, transcendental]]

  Категории:Факты и выводы ·

Функция: join (l, m)

  Возвращает новый список, состоящий из чередующихся элементов списков l и m. Результат будет иметь вид `[l[1], m[1], l[2], m[2], ...]`. Списки l и m могут иметь элементы любого типа.

  Если списки имеют разную длину, то `join` отбросит последние элементы более длинного списка.

  Ситуация, когда либо l, либо m не является списком, считается ошибкой.

  Примеры:

      (%i1) L1: [a, sin(b), c!, d - 1];
      (%o1)                [a, sin(b), c!, d - 1]
      (%i2) join (L1, [1, 2, 3, 4]);
      (%o2)          [a, 1, sin(b), 2, c!, 3, d - 1, 4]
      (%i3) join (L1, [aa, bb, cc, dd, ee, ff]);
      (%o3)        [a, aa, sin(b), bb, c!, cc, d - 1, dd]

  Категории:Списки ·

Функция: last (expr)

  Возвращает последний элемент expr (элемент, слагаемое, множитель, строку и т.п.).

  Категории:Списки ·Выражения ·

Функция: length (expr)

  По умолчанию возвращает число частей внешней (печатной) формы выражения expr. Для списка – это число элементов, для матрицы – число строк, для суммы – число слагаемых (см. `dispform`).

  Результат `length` зависит от переключателя `inflag`. Например, `length(a/(b*c));` дает 2, если `inflag` равен `false` (предполагается, что `exptdispflag` равна `true`), и дает 3, если `inflag` равен `true`, т.к. внутренние представление есть `a*b^-1*c^-1`.

  Категории:Списки ·Выражения ·

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

  Значение по умолчанию: `true` Если равна `false`, то все арифметические операции со списками не работают. Если равна `true`, то все операции список-матрица вызывают преобразование списков в матрицы и дают результат матричного типа. Однако, операции список-список продолжают давать списки.

  Категории:Списки ·Глобальные флаги ·

Функция: listp (expr)

  Возвращает `true`, если expr является списком и `false` в противном случае.

  Категории:Списки ·Функции предикаты ·

Функция: makelist (expr, i, i_0, i_1)
Функция: makelist (expr, x, list)

  Создает и возвращает список, каждый элемент которого построен из выражения expr.

  Вызов `makelist (expr, i, i_0, i_1)` возвращает список, с `j`-м элементом равным `ev (expr, i=j)` для `j`, пробегающего значения от i_0 до i_1.

  Вызов `makelist (expr, x, list)` возвращает список, с `j`-м элементом равным `ev (expr, x=list[j])` для `j`, пробегающего значения от 1 до `length (list)`.

  Примеры:

      (%i1) makelist(concat(x,i),i,1,6);
      (%o1)               [x1, x2, x3, x4, x5, x6]
      (%i2) makelist(x=y,y,[a,b,c]);
      (%o2)                 [x = a, x = b, x = c]

  Категории:Списки ·

Функция: member (expr_1, expr_2)

  Возвращает `true` если `is(expr_1 = a)`, для некоторого элемента a из `args(expr_2)`, и `false` в противном случае.

  Обычно, `expr_2` является списком. В этом случае `args(expr_2) = expr_2` и `is(expr_1 = a)` для некоторого элемента a из `expr_2`.

  Функция `member` не анализирует составные части аргументов `expr_2`, и может возвратить `false` даже если `expr_1` является частью какого-либо из аргументов `expr_2`.

  См. также `elementp`.

  Примеры:

      (%i1) member (8, [8, 8.0, 8b0]);
      (%o1)                         true
      (%i2) member (8, [8.0, 8b0]);
      (%o2)                         false
      (%i3) member (b, [a, b, c]);
      (%o3)                         true
      (%i4) member (b, [[a, b], [b, c]]);
      (%o4)                         false
      (%i5) member ([b, c], [[a, b], [b, c]]);
      (%o5)                         true
      (%i6) F (1, 1/2, 1/4, 1/8);
                                     1  1  1
      (%o6)                     F(1, -, -, -)
                                     2  4  8
      (%i7) member (1/8, %);
      (%o7)                         true
      (%i8) member ("ab", ["aa", "ab", sin(1), a + b]);
      (%o8)                         true

  Категории:Списки ·Выражения ·Функции предикаты ·

Функция: ninth (expr)

  Возвращает девятый элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: unique (L)

  Возвращает уникальные элементы списка L.

  Если все элементы списка L уникальны, то `unique` возвращает копию верхнего уровня списка L, а не сам список L.

  Если L не является списком, то `unique` возвращает L.

  Пример:

      (%i1) unique ([1, %pi, a + b, 2, 1, %e, %pi, a + b, [1]]);
      (%o1)              [1, 2, %e, %pi, [1], b + a]

  Категории:Списки ·Выражения ·

Функция: rest (expr, n)
Функция: rest (expr)

  Возвращает expr без первых n элементов, если n положительно, или без последних `- n` элементов, если n отрицательно. Если n равен 1, то он может быть опущен. Выражение expr может быть списком, матрицей или выражением.

  Категории:Списки ·Выражения ·

Функция: reverse (list)

  Изменяет порядок членов list (но не сами члены) на обратный. Функция `reverse` также работает с выражениями общего вида, например, `reverse(a=b);` дает `b=a`.

  Категории:Списки ·Выражения ·

Функция: second (expr)

  Возвращает второй элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: seventh (expr)

  Возвращает седьмой элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: sixth (expr)

  Возвращает шестой элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: sublist_indices (L, P)

  Возвращает список индексов элементов `x` списка L, для которых предикат `maybe(P(x))` возвращает `true`, за исключением элементов `unknown` и `false`. Параметр P может быть именем функции или лямбда-выражением. Параметр L должен быть списком.

  Примеры:

      (%i1) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b],
                             lambda ([x], x='b));
      (%o1)                     [2, 3, 7, 9]
      (%i2) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], symbolp);
      (%o2)                  [1, 2, 3, 4, 7, 9]
      (%i3) sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0],
                             identity);
      (%o3)                       [1, 4, 5]
      (%i4) assume (x < -1);
      (%o4)                       [x < - 1]
      (%i5) map (maybe, [x > 0, x < 0, x < -2]);
      (%o5)                [false, true, unknown]
      (%i6) sublist_indices ([x > 0, x < 0, x < -2], identity);
      (%o6)                          [2]

  Категории:Списки ·

Функция: tenth (expr)

  Возвращает десятый элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Функция: third (expr)

  Возвращает третий элемент выражения или списка expr. См. `first` по поводу подробностей.

  Категории:Списки ·Выражения ·

Previous: Ведение в работу со списками, Up: Списки [Contents][Index]