UTNianos

Versión completa: Ayuda con ejercicio de Funcional
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos =)
Mi problema es el siguiente: me piden que implemente la funcion esMultiploDe\2 que devuelve True si el segundo número es múltiplo del primero, pero usando composición y aplicación parcial. Y no teno ni idea =)
Espero que me puedan ayudar.
Muchas gracias!
Me parece que deberías empezar por leer un poco de que es aplicación parcial y composición. Sino fijate que en taringa estan todos los resueltos, donde no vas a aprender absolutamente nada.
esMultiploDe\2, se supone que recibe dos. Primero hacé la función como siempre, luego la vás modificando según lo que necesitás.

O sea, la función en primera instancia podría ser esto:


esMultiplo x y = (mod y x == 0)


Pero (== 0) es una función también, que devuelve un valor de verdad a base de lo que está afuera sobre si hay o no resto. Entonces hay que componer de derecha a izquierda (de lo primero a lo último, respectivamente), quedando algo del tipo:


esMultiplo x y = ((== 0) . mod) y x

(compilar esto tiraría un error de tipos, pero basta con definir bien las funciones porque Haskell medio que se volvió loco acá jaja)

Ahí va queriendo, pero para simplificarlo más se pueden sacar las variables (total, si Y es múltiplo de X, se supone que X lo será también de Y), y quedaría:


esMultiplo = (== 0) . mod




Alguien que me diga si le estoy pifiando o no, porque también yo lo estoy practicando =P
(03-05-2013 01:37)rob. escribió: [ -> ]

esMultiplo x y = ((== 0) . mod) y x


Te hago una pregunta, eso te compila? Con WinHugs me tira error de inferencia de tipos...
Saludos!
Hace un tiempo lo había hecho con el GHC si mal no recuerdo, y me compiló (creo que recién en la última en realidad, cuando no estaban las variables). Fijate bien, porque el Hugs tira errores pero no nos explica nada.

De todos modos, yo aclaré abajo que "(compilar esto tiraría un error de tipos, pero basta con definir bien las funciones porque Haskell medio que se volvió loco acá jaja)". Ponele,

esMultiplo :: Int -> Int -> Bool
No da decirle el resultado.

El error que tienen en esa función es que mod espera 2 parámetros, y en pdep se enseña composición con sólo 1.
Cita:1 esMultiplo = (== 0) . mod
Compilar y ejecutar código



Alguien que me diga si le estoy pifiando o no, porque también yo lo estoy practicando =P

Eso está bien =)thumbup3
(03-05-2013 16:10)Ichiluk escribió: [ -> ]No da decirle el resultado.

El error que tienen en esa función es que mod espera 2 parámetros, y en pdep se enseña composición con sólo 1.


Off-topic:
Tiene funciones parecidas para seguir practicando, de alguna manera uno tiene que empezar entendiendo, no?... yo veo algo resuelto, lo analizo, saco mis dudas y estoy en condiciones de hacer parecidos de ahí en más!
(03-05-2013 17:24)oreo_dorada escribió: [ -> ]
Cita:1 esMultiplo = (== 0) . mod
Compilar y ejecutar código



Alguien que me diga si le estoy pifiando o no, porque también yo lo estoy practicando =P

Eso está bien =)thumbup3
Genial! me acuerdo que lo había practicado los otros días (tanto al primero que era de la forma clásica y este) y lo pude digerir bien, sino ni pasaba =P
URLs de referencia