es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Scala Curry-Uncurry una Función La función Curry-Uncurry de Scala es una técnica que se utiliza para transformar funciones que toman múltiples argumentos en funciones que toman un solo argumento y devuelven otra función, que a su vez toma el siguiente argumento. La función Curry toma una función de múltiples argumentos y devuelve una nueva función que toma un solo argumento y devuelve otra función. La función resultante toma el siguiente argumento, y así sucesivamente, hasta que se han pasado todos los argumentos. Por otro lado, la función Uncurry es lo contrario a Curry. Toma una función que toma un solo argumento y devuelve otra función, y la transforma en una función que toma múltiples argumentos. En resumen, Curry-Uncurry es una técnica muy útil en Scala para transformar funciones y hacerlas más flexibles y reutilizables en diferentes contextos.

Estoy tratando de crear una función que reciba una función adder curry básica con 2 parámetros y devuelva una función adder no curry, y viceversa para la función curry (recibe la función no curry y devuelve la curry) en Scala. Estoy teniendo dificultades para determinar los tipos de retorno de las funciones curry, ¿alguien puede ayudar?

def adderCurried(a: Int)(b: Int): Int = a + b

//definir una función que devuelve la versión no curry de esta función:

val adderUncurried = toAdderUncurried(adderCurried)

adderUncurried(5,6) // devuelve 11

def adder(a: Int, b: Int): Int = a + b

//definir una función que devuelve la versión curry de esta función:

val adderCurried = toAdderCurried(adder)

adderCurried(5,6) // devuelve 11
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una función que reciba una función de suma curried con 2 parámetros y devuelva una versión sin currificar de la misma función en Scala, podemos utilizar el siguiente código:

    def toAdderUncurried(f: Int => Int => Int): (Int, Int) => Int = {
      (x: Int, y: Int) => f(x)(y)
    }
    

    Definimos una función toAdderUncurried que toma una función de suma curried con parámetros Int y devuelve una versión sin currificar de la misma función que toma dos parámetros Int. La función sin currificar devuelve el resultado de la función currificada con los dos parámetros Int.

    Para crear una función que reciba una función de suma sin currificar con 2 parámetros y devuelva una versión curried de la misma función, podemos utilizar el siguiente código:

    def toAdderCurried(f: (Int, Int) => Int): Int => Int => Int = {
      (x: Int) => (y: Int) => f(x, y)
    }
    

    Definimos una función toAdderCurried que toma una función de suma sin currificar con dos parámetros Int y devuelve una versión curried de la misma función que toma dos parámetros Int. La función currificada devuelve el resultado de la función sin currificar con los dos parámetros Int como argumentos.

    En ambos casos, utilizamos tipos de función para definir la entrada y salida de las funciones. Los tipos de entrada dependen de si la función de entrada está currificada o no currificada, mientras que los tipos de salida dependen de si la función de salida está currificada o no currificada.

Comments are closed.