Что такое каррирование?

Ответ

Каррирование - преобразование функции с N аргументами в цепочку функций с одним аргументом:

// Обычная функция
function add(int $a, int $b): int { return $a + $b; }

// Каррированная версия
function curriedAdd(int $a): Closure {
    return fn(int $b): int => $a + $b;
}

$add5 = curriedAdd(5);
echo $add5(3);  // 8
echo $add5(10); // 15

// Универсальное каррирование
function curry(callable $fn): Closure {
    $arity = (new ReflectionFunction($fn))->getNumberOfRequiredParameters();
    $args = [];
    $inner = function() use ($fn, $arity, &$args, &$inner) {
        $args = array_merge($args, func_get_args());
        return count($args) >= $arity ? $fn(...$args) : $inner;
    };
    return $inner;
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.