UTNianos

Versión completa: [pdep] Usando composición
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola! Resolví el siguiente ejercicio en forma correcta, lo que me falta es ponerlo como composición.
EJERCICIO:
Definir, usando composición, la función haceFrioF, que indica si una temperatura expresada en grados Fahrenheit es fría. Decimos que hace frío si la temperatura es menor a 8 grados Celsius.
Ejemplo:
Main> haceFrioF 50
False
Nota: Asumir que ya existe una función fahrToCelsius que convierte una temperatura Fahrenheit en Celsius. Usarla sin definirla.

RESOLUCIÓN: haceFrioF grados = (fahrToCelsius grados) <8
Objetivos que no se cumplieron:
haceFrioF debe usar composición
Para hacer composición deberías hacer algo así:

haceFrioF grados = grados <8

Main > haceFrioF (fahrToCelcius 50)

Pensalo como en matemáticas, composición de funciones es hacer f(g(x)). En este caso, vos a la función haceFrioF deberías pasarle el resultado de la aplicación de la función fahrToCelcius.
Lo que decís funciona, pero al igual que la resolución que puse yo no usa composición. Ejecute lo que pusiste en mumuki y dice:
Objetivos que no se cumplieron:
haceFrioF debe utilizar fahrToCelsius
haceFrioF debe usar composición
Ahí estuve googleando, en Haskell hay un operador que representa la composición de funciones, que es el "." (punto)

Probá haciendo

Main > (haceFrioF . fahrToCelsius) 50
Eso.

"Usar composición" en Haskell significa "usar el operador .", que es la función que compone funciones. `a.b` es equivalente a `a (b params)`.


Lo que vos tenés que resolver es haceFrioF, usando composición. Te dicen que haceFrioF si la temperatura que recibís es mayor a 8 grados Celsius, pero que la temperatura la recibís en Fahrenheit, y que tenés una función que convierte de Fahrenheit a Celsius.

Si la temperatura estuviera en la misma escala que te pidieron la regla (digamos, si te dieran temperaturas Celsius), ¿cómo resolverías un haceFrioC que es verdadero si la temperatura celsius que recibe es menor a 8 grados?

Teniendo eso, y teniendo una función que convierte una escala a la otra, ¿se te ocurre de qué modo podés _engancharlas_ para resolver el problema original?
la respuesta a ese ejercicio es:

haceFrioC temp = temp < 8
haceFrioF = haceFrioC.fahrToCelsius
URLs de referencia