UTNianos

Versión completa: [PDEP] [FUNCIONAL] 5.11 Tipos mumuki
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, estoy con el ejercicio 5.11 de funcional-mumuki.
No entiendo muy bien como resolverlo, los anteriores pude pero este no.
funcionMisteriosa1 :: (Num a) => (a -> Bool -> b) -> b
funcionMisteriosa2 :: (Int -> a) -> String -> a
funcionMisteriosa3 :: (c -> Bool -> a ) -> (b -> c) -> b -> a
Ya te dieron las respuestas, pero igual tratá de pensar como resolver este tipo de ejercicios que entran al parcial seguro (y los de parcial son mas complicados =P)

Empezá a resolverlos por lo que sabés seguro lo que es. Por ejemplo, en el primero 2 y True, osea Num y Boolean.
f está recibiendo esas dos cosas, seguro que es una función, osea que recibe un numero y un booleano y retorna... ¿Qué retorna? mepa que no hay forma de saberlo, así que le mandas una letra y fue, podría ser de cualquier tipo, llamemosle "b".
Entonces, tengo a f que es una funcion que recibe Num, Boolean, y retorna b, y tengo funcionMisteriosa1 que es igual a esa función, así que el valor de retorno debería ser el de f.

Así es como despejas el resultado que te pasaron arriba.
Para funcionMisteriosa1 me permite poner tanto Num como Fractional y en ambos casos es correcto. Tengo entendido que Num permite multiplicar números y Fractional agrega que los números se pueden dividir. En este caso por qué me permite los dos? No debería dejarme solamente Fractional que es el más amplio?
buenas, repasando tipos para el final,no me acuerdo que significa (=>) esta flecha, de que se diferencia de la normal(->).
(19-03-2018 18:51)Khal Drogo escribió: [ -> ]buenas, repasando tipos para el final,no me acuerdo que significa (=>) esta flecha, de que se diferencia de la normal(->).

up
(19-03-2018 18:51)Khal Drogo escribió: [ -> ]buenas, repasando tipos para el final,no me acuerdo que significa (=>) esta flecha, de que se diferencia de la normal(->).

Antes de usar una letra para representar un tipo de dato tenes que definirlo, luego de definirlo utilizas esa flecha para denotar que comenzas a decir que datos va a usar la funcion. Primero se define todo junto y despues se las utiliza
Por ejemplo si haces una funcion que te de el doble de un numero
esDoble :: (Num a) // aca estas definiendo que tipo de dato va a ser a// => //la flecha para indicar que empezas a definir que entra y sale de la funcion// a->a // la flecha normal para separar los datos a utilizar y salida
Aloha! Yo también tropecé con este ejercicio, vimos en clase un ejemplo de los ejercicios que están en la página de PdeP, y sigo complicado...
La profe (excelente, might I add), fue haciéndolo tipo para idiotas, así que debo estar más allá, porque sigo sin entender demasiado...

Lo que rescaté es, primero, que pone una flechita -> por parámetro, onda:
funcionManiatica x y z ---> funcionManiatica:: -> -> ->

Cuando hay una función pone (), supongando que x fuera la función:
funcionManiatica:: () -> -> ->

Y, ahí se fija qué hay en la definición:
Si tenemos un ==, es porque es un dato comparable, Eq. Entonces pone el (Eq a) y, como dijeron más arriba, la flecha del entonces =>
Si tenemos uno de esos fabulosos < o > (y sus amigos, <= y >=) pone (Ord a), porque el tipo es de typeclass ordenable.

En el ejemplo de clase había un fst y, entonces y tiene que ser una tupla de dos elementos, porque fst recibe ese tipo como parámetro.
Y, así de sencillo, hasta que volvemos a Mumuki y seguimos sin entender qué carajos hace esa función de mierda, y la 2 y la 3 nos animan a dejar de ser programadores.

Por mi parte, y a fines de entender, cuando algo me complica lo tiro en el intérprete (el ghci), que te da la respuesta como hicieron más arriba, pero no me sirve más que para complicarme, y seguir tratando de comprender. Como afirmaron ya, en el parcial no hay respuestas automáticas, sino pensar. Y, si no se entiende la forma de razonarlo, oh my.

Espero haber aportado, cuando entienda más algo, volveré y aportaré más giladas.

Salute!
=D
URLs de referencia