Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Pregunta Polimorfismo Funcional
Autor Mensaje
fedee90 Sin conexión
Militante
_
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 66
Agradecimientos dados: 20
Agradecimientos: 7 en 7 posts
Registro en: Mar 2009
Facebook Twitter
Mensaje: #1
Pregunta Polimorfismo Funcional Ejercicios Paradigmas de Programación
Buenas.. alguno si me podrá ayudar con esto le agradecería mucho:

queHace2 f x l = (head . filter ((x==).f)) l

Tengo que decir ¿Qué hace?, Dar el prototipo de la función y un ejemplo de invocación y respuesta.

Les doy un ejemplo

Main> (2*) 2 [1..10]
1
Main> (3*) 3 [1..10]
1

La verdad que no entiendo muy bien que hace esa función, si alguien me podría explicar.. gracias!
16-05-2012 09:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
H3rnst Sin conexión
Secretario de la SAE
Overlord
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 583
Agradecimientos dados: 151
Agradecimientos: 49 en 23 posts
Registro en: Sep 2010
Mensaje: #2
RE: Pregunta Polimorfismo Funcional
Te puedo ayudar poco, porque no me acuerdo mucho de programación funcional (y siempre odié esas funciones compuestas flasheras)

Por lo que veo ahí, tenés una función que recibe tres cosas: una f (función), una x (un valor, un número, un elemento), y una l (una lista).

Después tenés un (head . filter ((x==).f)), que para mi lo que hace es devolverte la cabeza de la lista que contiene todos los elementos de la lista l que cumplen que f aplicado a ese elemento es igual a x (tomate un tiempito para releer lo que puse =P )

mmmm.... creo eh, agarralo con pinzas. Si tengo razón, entonces cuando hagas:

Main> (2*) 4 [1..10]

te debería dar 2

[Imagen: Hernst.png]
17-05-2012 12:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] H3rnst recibio 1 Gracias por este post
brunodiaz (17-05-2012)
rulo Sin conexión
Ultra Nerd Mod
Another green world
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.274
Agradecimientos dados: 48
Agradecimientos: 56 en 33 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #3
RE: Pregunta Polimorfismo Funcional
Se fija que elementos de la lista,luego de aplicarles una funcion (f) resultan ser iguales al numero dado (l).Y te devuelve de esa lista de elementos,el primero.

OJO! Lo que te devuelve es el primero elemento de la lista original que cumple con esto.Es decir,antes de aplicarle la funcion ya que funcional no tiene efecto de lado.

Cita:"...you can't kill a vegetable by shooting it through the head."
(Este mensaje fue modificado por última vez en: 17-05-2012 13:10 por rulo.)
17-05-2012 13:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
rld (17-05-2012)
rld Sin conexión
Secretario General
ლ(ಠ益ಠლ)
*******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 787
Agradecimientos dados: 9
Agradecimientos: 10 en 9 posts
Registro en: Nov 2010
Mensaje: #4
RE: Pregunta Polimorfismo Funcional
Primero l se lo estás pasando a filter ((x==).f). Es decir, estas filtrando todos los elementos de l que al aplicarles f te dan igual a x. Esto te devuelve una lista, que se la pasas a head, y con esto te quedás con el primer elemento.

Para el prototipo:
l es una lista de cualquier cosa (digamos, [a])
f recibe elementos de esa lista, y devuelve algun otro tipo de dato (a -> b)
x tiene que poder compararse con los resultados de f, entonces tiene que ser de tipo b
Finalmente, head te devuelve un elemento de l asi que el tipo de retorno va a ser a.

La restriccion es que los elementos de b tienen que ser comparables por iguales (por el ==), entonces habría que agregar (Eq b).

Finalmente:
Eq b => (a -> b) -> b -> [a] -> a

Verificando en ghci:
Cita:Prelude> let queHace2 f x l = (head . filter ((x==).f)) l
Prelude> :t queHace2
queHace2 :: Eq b => (c -> b) -> b -> [c] -> c
Le dieron ganas de usar c en vez de a, pero esta bien =P

ρλδ
(Este mensaje fue modificado por última vez en: 17-05-2012 13:57 por rld.)
17-05-2012 13:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rld recibio 1 Gracias por este post
brunodiaz (17-05-2012)
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #5
RE: Pregunta Polimorfismo Funcional

queHace2 f x l = (head . filter ((x==).f)) l

queHace2 (2*) 2 [1..10]


Parece que el Haskell del compilador es distinto al nuestro.
(Este mensaje fue modificado por última vez en: 17-05-2012 14:57 por brunodiaz.)
17-05-2012 14:50
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] brunodiaz recibio 1 Gracias por este post
rulo (19-05-2012)
rulo Sin conexión
Ultra Nerd Mod
Another green world
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.274
Agradecimientos dados: 48
Agradecimientos: 56 en 33 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #6
RE: Pregunta Polimorfismo Funcional
Parece que usa GHC el compilador del foro no? Es el unico compilador que conozco que se queja cuando no tenes un modulo main.

Cita:"...you can't kill a vegetable by shooting it through the head."
19-05-2012 22:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.