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
[PdeP] Consulta - TP Funcional
Autor Mensaje
bareel Sin conexión
Profesor del Modulo A
Moving Forward.
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 213
Agradecimientos dados: 45
Agradecimientos: 8 en 6 posts
Registro en: Oct 2011
Mensaje: #1
[PdeP] Consulta - TP Funcional Trabajo practico Paradigmas de Programación
Buenos días compañeros, cómo andan? Espero que muy bien.

Tengo algunas consultas respecto de un enunciado de un trabajo practico, que no logro comprender cómo implementarlo.
El enunciado dice:

3. Combinaciones de máquinas: Las máquinas de la fábrica tienen la ventaja que se pueden interconectar mediante “cintas”, que permiten formar líneas de montaje. Implementar las siguientes cintas:

a. Cinta transportadora: Combina tres máquinas de forma tal que el resultado de una sea ingresado a la otra y a su vez, su resultado sea ingresado en la restante. Cada máquina puede afectar al producto que le llega alterándolo, agregándole cosas, combinándolo con otra cosa, etc.

Por ejemplo, la siguiente consulta:
> cintaTransportadora maquinaA maquinaB maquinaC
Devuelve una nueva máquina que primero procesará su entrada con maquinaA, dará un resultado, éste se procesará con maquinaB, dará un segundo resultado, y esto se procesará por maquinaC, dando el último resultado de la secuencia de máquinas.


Esta es mi función:

cintaTransportadora:: (Bidon -> Bidon) -> (Bidon -> Cajon -> Helado) -> (Helado -> Int -> Helado) -> Bidon -> Cajon -> Int -> Helado
cintaTransportadora dispenser batidora heladera (lts,temp) (fruta,peso) frio = heladera (batidora (dispenser (lts,temp)) (fruta,peso)) frio

Me devolvieron el TP diciendo que en realidad no debo definir la función estáticamente con esas 3 funciones como parámetros, sino que más bien, la función tiene que ser capaz de recibir cualquier máquina y actuar en consecuencia.

Mi pregunta es: cómo puedo armar un prototipo de función que me permita hacer esto? Porque en el caso que adjunté arriba, se ve en el prototipo que estos son los tipos de los parámetros de entrada y salida: (Bidon -> Bidon) -> (Bidon -> Cajon -> Helado) -> (Helado -> Int -> Helado) -> Bidon -> Cajon -> Int -> Helado

Estas son las máquinas que debo combinar:



type Helado = (String, Int, Float)
type Bidon = (Int, Int) -- (litros, temperatura)
type Cajon = (String, Int) -- (fruta, peso)

heladera:: Helado -> Int -> Helado
batidora:: Bidon -> Cajon -> Helado
exprimidora:: Cajon -> Cajon
mixturadora:: Helado -> Helado -> Helado
dispenser:: Bidon -> Bidon


Desde ya, muchas gracias!!!
Saludos!
06-09-2014 11:39
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Diego Pedro Sin conexión
Secretario de la SAE
que calor no?
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 631
Agradecimientos dados: 23
Agradecimientos: 105 en 48 posts
Registro en: May 2011
Mensaje: #2
RE: [PdeP] Consulta - TP Funcional
Hola,

Lo que estás haciendo mal es que en vez de definir la función en forma genérica lo haces para un caso concreto, y eso no sirve ya que por como está definida su función mañana me cambia el tipo de una de las máquinas, entonces ya no sirve más tu función y deberías redefinirla, y mucho sentido no tendría eso.

Por lo tanto a lo que el punto va es que definas una función que pueda combinar 3 máquinas, donde cada máquina esta definida como una función, y vos te debes preguntar, que condición tiene que cumplirse (pista: pensá en composición de funciones) para hacer una función que justamente tome como dominio, la imagen de otra función.
07-09-2014 14:07
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
bareel Sin conexión
Profesor del Modulo A
Moving Forward.
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 213
Agradecimientos dados: 45
Agradecimientos: 8 en 6 posts
Registro en: Oct 2011
Mensaje: #3
RE: [PdeP] Consulta - TP Funcional
Entiendo lo de la composición de funciones que lo apliqué en:

cintaTransportadora dispenser batidora heladera (lts,temp) (fruta,peso) frio = heladera (batidora (dispenser (lts,temp)) (fruta,peso)) frio

Lo que no logro comprender es cómo definir el prototipo de la función de forma genérica.
La función definida quedaría de la siguiente manera:

cintaTransportadora:: y acá cómo lo defino el prototipo?
cintaTransportadora maquinaC maquinaB maquinaA (lts,temp) (fruta,peso) frio = maquinaC (maquinaB (maquinaA (lts,temp)) (fruta,peso)) frio


Gracias!!!!
08-09-2014 14:58
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Diego Pedro Sin conexión
Secretario de la SAE
que calor no?
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 631
Agradecimientos dados: 23
Agradecimientos: 105 en 48 posts
Registro en: May 2011
Mensaje: #4
RE: [PdeP] Consulta - TP Funcional
Me parece que no tenés muy en claro el concepto de composición de funciones, te recomiendo que lo repases y preguntes al profesor/ayudantes porque dudo que yo te pueda sacar la duda tan bien como ellos.

Pero te puedo ayudar con que, la idea de composición viene asociada a la aplicación parcial, lo cual permite "transformar" a las funciones de n parámetros en funciones de 1 parámetro. Por lo tanto en tu definición no tiene sentido pasarle los 3 parámetros, simplemente con pasarle el primer parámetro a aplicar, como la respuesta/imagen de dicha primera función va a ser el dominio de la próxima, sería redundante y erróneo (te va a romper) si le pasas mas parámetros.

Entonces te quedaría:

cintaTransportadora:: (a->b) -> (b->c) -> (c->d)

cintaTransportadora maquinaC maquinaB maquinaA paramInicial = (maquinaC . maquinaB . maquinaA) paramInicial
10-09-2014 10:30
Envíale un email 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.