Каррирование


Каррирование (от англ. currying, иногда — карринг) — преобразование функции от многих аргументов в набор вложенных функций, каждая из которых является функцией от одного аргумента. Возможность такого преобразования впервые отмечена в трудах Готтлоба Фреге, систематически изучена Моисеем Шейнфинкелем в 1920-е годы, а наименование своё получила по имени Хаскелла Карри — разработчика комбинаторной логики, в которой сведение к функциям одного аргумента носит основополагающий характер. Также, наименование карринг (англ. currying) выбрано не случайно, так как для англо-язычного слушателя является немедленным намёком (аллюзией) на термин перенос (англ. carry) аргумента от одной функции к другой.

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

Декаррирование (англ. uncurring) вводится как обратное преобразование, восстанавливающее каррированный аргумент: для функции оператор декаррирования выполняет преобразование в ; тип оператора декаррирования — .