33. Currying

Crea una función que implemente el concepto de "currying". Currying es la técnica de transformar una función que toma múltiples argumentos en una secuencia de funciones que toman un solo argumento cada una.

La función curry debe aceptar una función f (que toma n argumentos) y devolver una nueva función "currificada". Al llamar a la función currificada con un argumento, debe devolver otra función que espera el siguiente argumento, y así sucesivamente, hasta que todos los argumentos hayan sido proporcionados, momento en el cual se ejecuta la función original f.

def curry(func):
    """
    Transforma una función de múltiples argumentos en una secuencia de funciones de un solo argumento.
    """
    def curried(*args):
        if len(args) >= func.__code__.co_argcount:
            return func(*args)
        def f_next(*new_args):
            return curried(*(args + new_args))
        return f_next
    return curried

# Ejemplo de uso
def sumar(a, b, c):
    return a + b + c

sumar_curry = curry(sumar)

# Paso a paso
resultado_parcial = sumar_curry(1)
resultado_parcial_2 = resultado_parcial(2)
resultado_final = resultado_parcial_2(3)
# resultado_final es 6

# Directamente
sumar_curry(1)(2)(3)
# 6

# Con algunos argumentos iniciales
sumar_uno_dos = sumar_curry(1)(2)
sumar_uno_dos(3)
# 6

Ratoncito

Implementa la función curry para que funcione con funciones de una cantidad fija de argumentos.

Dragón

Extiende la función curry para que pueda manejar funciones con argumentos por defecto (*args o **kwargs en Python si es el lenguaje de ejemplo, aunque esto es más conceptual) o para que sea más flexible en la forma en que se aplican los argumentos (por ejemplo, permitiendo aplicar múltiples argumentos en una sola llamada intermedia, no solo uno por uno).

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

Visitors in real time

You are alone: 🐱