Функциональная библиотека: Симфония данных

Закиньте сеть своих мыслей в реку данных. Функции высшего порядка, такие как map, filter и reduce, абстрагируют повторяющиеся задачи и изящно формируют поток данных. Код становится лаконичным, а мысль — ясной.

Эта страница представляет собой справочник по основным функциям высшего порядка в Лиспексе. Эти функции принимают другие функции в качестве аргументов для обработки списков, обеспечивая мощный и декларативный стиль программирования.


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"))
;; Результат: "прекрасный"