UTNianos

Versión completa: paradigmas Definir la función darVuelta 6.11 mumuki
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Definir la función darVuelta que toma una función de dos argumentos y devuelve otra que toma los mismos argumentos, pero dados vuelta.
Ejemplo:
darVuelta (/) 1 2
2 -- porque dio vuelta los parámetros,
-- y terminó haciendo 2/1 en lugar de 1/2

darVuelta take [1..10] 3
[1, 2, 3] -- take espera primero la cantidad y después la lista
Escribí además su tipo.

Alguna ayuda? No se por donde empezar
Hola, lo que te pide hacer es una Función de orden superior, que reciba una función que se aplique a dos parámetros y esos dos parámetros posibles y devuelva la función con los parámetros invertidos.

Pensá en el tipo de take por ejemplo, es (simplificado)

take :: Int -> [x] -> [x]
Una apliacaión sería
take 2 ["hola", "chau", "tres", "juan"]
y te devuelve los dos primeros elementos de esa lista
["hola", "chau"]

Si lo aplicás con darVuelta, para que funcione debés hacer
>darVuelta take ["hola", "chau", "tres", "juan"] 2

Así, dar vuelta invierte los parámetros que recibe la función anterior y listo.

Cualquier cosa chiflame y si se complica mucho, te paso una solución posible.
. .
darVuelta :: (a ->b -> c ) -> b -> a -> c
darVuelta f v1 v2 = f v2 v1
URLs de referencia