Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аналитвыч_Лекция9.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

5. Списки

Списки - базовые строительные блоки для Maxima и Lisp. Все прочие типы данных (массивы, хэш-таблицы, числа) представляются как списки. Чтобы задать список, достаточно записать его элементы через запятую и ограничить запись квадратными скобками. Список может быть пустым или состоять из одного элемента

Элементом списка может и другой список

Ссылка на элемент списка производится по номеру элемента списка:

5.1. Функции для элементарных операций со списками

Функция length возвращает число элементов списка (при этом элементы списка сами могут быть достаточно сложными конструкциями):

Функция copylist(expr) возвращает копию списка expr:

Функция makelist создаёт список, каждый элемент которого генерируется из некоторого выражения. Возможны два варианта вызова этой функции:

makelist (expr, i, i_0, i_1)

makelist (expr, x, list)

Вызов

makelist (expr, i, i_0, i_1)

возвращает список, j-й элемент которого равен ev(expr,i = j), при этом индекс j меняется от i0 до i1. Вызов

makelist (expr, x, list)

возвращает список, j-й элемент которого равен ev(expr,x = list[j]), при этом индекс j меняется от 1 до length (list). Примеры:

Во многом аналогичные действия выполняет функция createlist(form,x1,list1,...,xn,listn). Эта функция строит список путём вычисления выражения form, зависящего от x1, к каждому элементу списка list1 (аналогично form, зависящая и от x2, применяется к list2 и т.д.). Пример:

Функция append позволяет склеивать списки. При вызове

append (list_1, ..., list_n)

возвращается один список, в котором за элементами list_1 следуют элементы list2 и т.д. вплоть до list_n. Пример:

Создать новый список, компонуя элементы двух списков поочередно в порядке следования, позволяет функция join(l,m). Новый список содержит l1, затем m1, затем l2, m2 и т.д. Пример:

Длина полученного списка ограничивается минимальной длиной списков l и m.

Функция cons (expr, list) создаёт новый список, первым элементом которого будет expr, а остальные - элементы списка list.

Функция endcons (expr, list) также создаёт новый список, первые элементы которого - элементы списка list, а последний - новый элемент expr. Пример:

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

Функция member(expr1,expr2) возвращает true если expr1 является элементом списка expr2, и false в противном случае. Пример:

Функция rest(expr) выделяет остаток после удаления первого элемента списка expr. Можно удалить первые n элементов, используя вызов rest(expr,n). Функция last(expr) выделяет последний элемент списка expr (аналогично first - первый элемент списка). Примеры:

Суммирование и перемножение списков (как и прочих выражений) осуществляется функциями sum и product. Функция sum(expr,i,in,ik) суммирует значения выражения expr при изменении индекса i от in до ik. Функция product(expr,i,in,ik) перемножает значения выражения expr при изменении индекса i от in до ik. Пример:

5.2. Функции, оперирующие с элементами списков

Функция map(f,expr1,...,exprn) позволяет применить функцию (оператор, символ операции) f к частям выражений expr1, expr2, ...,exprn. При использовании со списками применяет f к каждому элементу списка. Следует обратить внимание, что f - именно имя функции (без указания переменных, от которых она зависит). Примеры:

Функция f может быть и заданной пользователем, например:

Функция apply применяет заданную функцию ко всему списку (список становится списком аргументов функции; при вызове (F,[x1,...,xn] вычисляется выражение F(arg1,...,argn)). Следует учитывать, что apply не распознаёт ординарные функции и функции от массива. Пример:

Чтобы найти максимальный или минимальный элемент набора чисел, надо вызвать функции "max"или "min". Однако, обе функции в качестве аргумента ожидают несколько чисел, а не список, составленный из чисел. Применять подобные функции к спискам и позволяет функция "apply":