Эта страница представляет собой справочник по основным функциям высшего порядка в Лиспексе. Эти функции принимают другие функции в качестве аргументов для обработки списков, обеспечивая мощный и декларативный стиль программирования.
map
Применяет заданную функцию к каждому элементу списка и возвращает новый список, содержащий результаты. Новый список всегда будет иметь такое же количество элементов, как и исходный.
- Синтаксис:
(map FUNCTION LIST) - Аргументы:
FUNCTION: Функция, которая принимает один аргумент (элемент списка) и возвращает преобразованное значение.LIST: Список для итерации.- Возвращает: Новый список, содержащий преобразованные элементы.
- Выбрасывает:
RuntimeError, если аргументы не являются функцией и списком соответственно.
Пример:
;; Создать новый список, где каждое число возведено в квадрат.
(map (lambda (n) (* n n)) (list 1 2 3 4))
;; Результат: (list 1 4 9 16)
filter
Возвращает новый список, содержащий только те элементы из исходного списка, для которых заданная функция-предикат возвращает истинное значение (любое значение, отличное от #f).
- Синтаксис:
(filter PREDICATE_FUNCTION LIST) - Аргументы:
PREDICATE_FUNCTION: Функция, которая принимает один аргумент и возвращает булево (#t— оставить элемент,#f— отбросить).LIST: Список для фильтрации.- Возвращает: Новый список, который может быть короче или такой же длины, как и исходный.
- Выбрасывает:
RuntimeError, если аргументы не являются функцией и списком соответственно.
Пример:
;; Создать новый список только с числами больше 5.
(filter (lambda (n) (> n 5)) (list 2 8 4 10 5 7))
;; Результат: (list 8 10 7)
reduce
Сводит список к одному значению, многократно применяя функцию. Она итерирует по списку, поддерживая "аккумулятор", который обновляется на каждом шаге.
- Синтаксис:
(reduce FUNCTION INITIAL_VALUE LIST) - Аргументы:
FUNCTION: Функция, которая принимает два аргумента:(аккумулятор, текущий_элемент). Она должна возвращать новое значение аккумулятора.INITIAL_VALUE: Начальное значение для аккумулятора.LIST: Список для свертки.- Возвращает: Конечное значение аккумулятора после итерации по всему списку.
- Выбрасывает:
RuntimeError, если аргументы не являются функцией, значением и списком.
Пример: Суммирование всех чисел в списке
(reduce (lambda (sum el) (+ sum el))
0
(list 10 20 30 40))
;; Результат: 100
Пример: Поиск самого длинного слова в списке
(reduce (lambda (longest word)
(if (> (length word) (length longest))
word
longest))
""
(list "Lispex" "is" "a" "delightful" "language"))
;; Результат: "прекрасный"