Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000182.doc
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
731.14 Кб
Скачать

Функциональное программирование

Тип с параметром. Параметризованные типы необходимы для создания универсальных структур данных. Например, для создания универсального стека тип содержимого должен быть указан в качестве параметра. В традиционных языках вместо параметра иногда использовались указатели.

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

Первый, остаток. Эти две когда-то основные функции работы со списками — получение первого элемента и получение остатка списка (без первого элемента) — ведут свое происхождение от LISP. Название функциям LISP (SDR и SAR) дали соответствующие ассемблерные команды. Сейчас эти функции используются достаточно редко.

Строки как списки символов. Эта возможность позволяет применять к строкам символов функции работы со списками (например, сделать «срез» символов из строки). Это очень удобная возможность унифицировать списки и строки.

Списки как массивы. Возможность получить элемент списка по его номеру (например, «список[5]») существует только в новых императивных языках.

Списки с элементами произвольного типа. Как правило, тип у всех элементов списка (подобно массиву) одинаков. Однако некоторые языки дают программисту возможность объединять в списке элементы разных типов.

Кортежи. Традиционно кортеж — это список из двух элементов. Использовались кортежи обычно при создании хэш-таблиц (первый элемент — индекс, второй — значение). С появлением встроенных хэш-таблиц кортежи перешли в разряд анахронизмов. В Python название «кортеж» использовано для именования списков-констант.

Кортежи, первый и второй. Специальные функции для получения первого и второго элементов кортежа. Применяются редко, как и сами кортежи.

Хэш-таблицы. Хэш-таблицы (словари) традиционно использовались для быстрой выборки по ключевому значению (например, по строке символов) и были сильноразреженными массивами (большинство элементов такого массива не заполнено). Перерасход памяти окупался быстротой доступа. Новые императивные языки содержат встроенные хэш-таблицы.

Объявление функции. При объявлении функции требуется задать имя, список параметров, типы результата и параметров, и тело функции (выражение или блок операторов).

Рекурсивные функции. Как правило, все функции в современных языках программирования рекурсивны, т. е. могут вызывать сами себя.

Лямбда-функции. Из всего большого раздела логики, называемого лямбда-исчислением, современные языки унаследовали только термин «лямбда-функции». Это маленькие функции без имени. Казалось бы, зачем нужны функции без имени, ведь их даже вызвать нельзя? Однако они могут быть использованы как параметры или результат функций высшего порядка (см. следующий пункт).

Функции высшего порядка. В лямбда-исчислении функциями высшего порядка называются функции, которые могут принимать (в виде параметров) и возвращать (в виде результата) другие функции. В функциональных языках все функции — это функции высшего порядка.

Отложенные вычисления. Отложенные («ленивые», lazy) вычисления — механизм, позволяющий функциональным языкам определять потенциально «бесконечные» функции. Как правило, такая функция рекурсивно вызывает сама себя. В императивных языках все функции являются «ленивыми».