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]