Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 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: 647
Agradecimientos dados: 246
Agradecimientos: 117 en 50 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
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
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 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:Absolve me, save my reign
Have you forgotten me?
(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: 14 en 12 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.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 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
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 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:Absolve me, save my reign
Have you forgotten me?
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: 2 invitado(s)