Parcial 2018, ejercicio 9

Parcial 2018, ejercicio 9

de Juan Manuel Rodriguez Otormin -
Número de respuestas: 2

Buenas, no logro entender el siguiente ejercicio:

Dada la siguiente definición:

uc = uncurry curry 

¿Cuál de las siguientes afirmaciones es correcta? 

(a) uc (uncurry (&&), True) False 

(b) uc ((&&), True) False 

(c) uc (uncurry (&&)) (True, False) 

(d) La definición de uc es incorrecta

Respuesta: A


¿Se puede aplicar curry a una tupla? ¿Qué se logra con eso? ¿Qué pasa cuando después le aplicamos uncurry?

En respuesta a Juan Manuel Rodriguez Otormin

Re: Parcial 2018, ejercicio 9

de Luis Sierra -
hola juan,

recordemos los tipos de curry y uncurry

curry :: ((a, b) -> c) -> a -> (b -> c)
uncurry :: (s -> t -> u) -> (s, t) -> u

cuando miramos uncurry curry vemos que curry, con tipo
((a, b) -> c) -> a -> (b -> c), debe calzar (unificar) con el tipo
del primer argumento de uncurry s -> t -> u. así que

s := (a, b) -> c
t := a
u := b -> c

y tenemos que

uc :: ((a, b) -> c, a) -> b -> c

supongo que tu pregunta no es si curry se puede aplicar a una tupla,
sino si uc se puede aplicar a una tupla; y efectivamente, el primer
argumento de uc no solamente puede ser una tupla; debe ser una tupla.

así que sospecho que estás pasando por alto que en uncurry curry loquesea,
loquesea no es el primer argumento de curry, sino el segundo argumento
de uncurry. explicitando los paréntesis, lo que tenemos es que

uc loquesea
= (uncurry curry) loquesea

y no, como creo que piensas
uc loquesea
= uncurry (curry loquesea)

luis