Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лисп.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.66 Mб
Скачать

20.Применяющие функционалы.

Одним из основных типов функционалов являются функции, которые позволяют вызывать другие функции, иными словами, применять функциональный аргумент к его параметрам. Такие функционалы называют применяющими или аппликативными функционалами .

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

APPLY является функцией двух аргументов, из которых первый аргумент представляет собой функцию, которая применяется к элементам списка, составляющим второй аргумент функции APPLY:

Использование APPLY дает большую гибкость по сравнению с прямым вызовом функции: с помощью одной и той же функции APPLY можно в зависимости от функционального аргумента осуществлять различные вычисления.

Функционал FUNCALL по своему действию аналогичен APPLY, но аргументы для вызываемой функции он принимает не списком, а по отдельности:

Пример:

FUNCALL и APPLY позволяют задавать вычисления (функцию) произвольной формой, например, как в вызове функции, или символом, значением которого является функциональный объект. В обыкновенном вызове функции можно использовать лишь символ, связанный DEFUN с лямбда-выражением. Интерпретация имени зависит от синтаксической позиции.

21.Отображающие функционалы.

Важный класс функционалов в практическом программировании на языке Лисп образуют отображающие функции или МАР-функции. МАР-функционалы являются функциями, которые некоторым образом отображают список в новую последовательность или порождают побочный эффект, связанный с этой последовательностью. Имена МАР-функций начинаются на MAP, и их вызов имеет вид

Здесь l1 ... lN - списки, a fn- функция от N аргументов. Как правило, МАР-функция применяется к одному аргументу-списку, т.е. fn является функцией от одного аргумента:

Существуют два основных типа МАР-функций. Одни из них применяют функциональный аргумент fn таким образом, что его аргументами будут последовательные CAR аргумента-списка (иными словами, fn применяется к элементам списка). Другие применяют функциональный аргумент к последовательным CDR списка. Результатом этих повторяющихся вычислений будет список, состоящий из результатов последовательных применений функции. Кроме того, функции отличаются друг от друга способом формирования результата. Во всех случаях число аргументов-списков должно совпадать с числом аргументов применяемой для вычислений функции.

Рассмотрим основные типы МАР-функций.

Значение функции MAPCAR вычисляется путем применения функции fn к последовательным элементам xi списка, являющегося вторым аргументом MAPCAR. Например, в случае одного списка получается следующее соответствие:

В качестве значения функционала возвращается список, построенный из результатов вызовов функционального аргумента MAPCAR. Приведем пример:

MAPLIST действует подобно MAPCAR, но действия осуществляются не над элементами списка, а над последовательными CDR (начиная с самого исходного списка) этого списка:

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

Функции MAPCAN и MAPCON являются аналогами функций MAPCAR и MAPLIST. Отличие состоит в том, что MAPCAN и MAPCON не строят, используя LIST, новый список из результатов, а объединяют списки, являющиеся результатами, в один список, используя структуро-разрушающую псевдофункцию NCONC.

Функции МАРС и MAPL также аналогичны функциям MAPCAR и MAPLIST, но отличаются от них и от функций MAPCAN и MAPCON тем, что не собирают и не объединяют результаты. Возникающие результаты просто теряются. В качестве значения возвращается значение второго аргумента функции:

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

Приведем в виде таблицы МАР-функции, предназначенные для аргументов, записанных в виде списков.

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

Это традиционные функционалы, определенные для списков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]