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
[Paradigmas] Duda con Haskell
Autor Mensaje
alter Sin conexión
Empleado del buffet
Sin estado :(
*

Otra
Facultad Regional Haedo

Mensajes: 19
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Aug 2008
Mensaje: #1
[Paradigmas] Duda con Haskell Dudas y recomendaciones Paradigmas de Programación
Tengo este ejercicio :
tengo clientes, nombre del cliente y la plata que tienen
-- clt = (nombre, plata)
clientes = [("pepito", 50),("roberto",20),("dora",30)] -- lista de clt
plataClientes(_,plata) = plata
plataTotal clientes = sum [ plataClientes uncliente | uncliente <- clientes ]

aca tengo articulos, nombre y precio, y una funcion que devuelve la plata que tienen los clientes, despues de comprar un articulo.
-- articulo= (nombre, precio)
articulo = ("cuchillo", 15)
devolverPrecio (_,precio) = precio
cobroArticulo clt articulo = plataClientes clt - devolverPrecio articulo

ahora quiero una funcion en la que le paso los clientes (clientes) y no se si corresponderia o no, pasarle el artículo, y que me devuelva una lista, con los nombres y la plata actual, despues de comprar un artículo, siempre y cuando la plata actual de los clientes sea mayor 10.
Sería algo así, pero esto está mal:
listaPlatudos clientes = [ uncliente | uncliente <- clientes, cobroArticulo uncliente articulo > 10 ]

la pregunta es: cómo lo debería escribir¡???
saludos!
17-04-2011 21:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Aye Sin conexión
Rock Admin
.
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.154
Agradecimientos dados: 71
Agradecimientos: 429 en 53 posts
Registro en: Mar 2008
Mensaje: #2
RE: [Paradigmas] Duda con Haskell
La verdad se me complicó pensarla.... Con un filter y adentro un map no se puede? con el map restás el monto del artículo y después con el filter filtrás los mayores a diez????

Puede que esté mandando mucha fruta...

[Imagen: digitalizartransparent.png]
17-04-2011 23:02
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanuiit Ausente
♫ I'm Blue ...
... Da ba dee, da ba da ♫
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8.880
Agradecimientos dados: 216
Agradecimientos: 572 en 201 posts
Registro en: Aug 2010
Mensaje: #3
RE: [Paradigmas] Duda con Haskell
Claro, vos querés tipo pasar un valor numérico y después que se ejecute la función y la salida sea una lista?
El otro dia tuvimos esa idea, si es eso lo que necesitás hacer, me fijo en lo que tengo hecho. Igual tengo mis dudas, voy dos clases de la materia

ALGORITMOS

Apuntes: Mem. Dinámica - Mem. Estática - Proc. y Funciones || Guías: Módulos + 83 Ejercicios || Finales: 2004-2013


[Imagen: digitalizartransparent.png]

[Imagen: firmananiv2.png]
17-04-2011 23:18
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza En línea
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.112
Agradecimientos dados: 763
Agradecimientos: 731 en 316 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #4
RE: [Paradigmas] Duda con Haskell
no faltan datos ?
como se que productos compran cada clientes ? o todos compran el mismo producto ?
desp de saber eso, si, con un map y filter deberia andar joya

[Imagen: v34BEFt.gif]
17-04-2011 23:20
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alter Sin conexión
Empleado del buffet
Sin estado :(
*

Otra
Facultad Regional Haedo

Mensajes: 19
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Aug 2008
Mensaje: #5
RE: [Paradigmas] Duda con Haskell
cualquier idea es bienvenida, estoy probando a lo pavote...
aye, lo que decís de filter y map, no tengo ni idea, si podes explicame, o pasame algo de donde pueda leerlo, se agradece.
17-04-2011 23:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza En línea
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.112
Agradecimientos dados: 763
Agradecimientos: 731 en 316 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #6
RE: [Paradigmas] Duda con Haskell
con "n o tengo ni idea" te referis a que no lo viste todavia en la cursada ? xD

[Imagen: v34BEFt.gif]
17-04-2011 23:23
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alter Sin conexión
Empleado del buffet
Sin estado :(
*

Otra
Facultad Regional Haedo

Mensajes: 19
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Aug 2008
Mensaje: #7
RE: [Paradigmas] Duda con Haskell
gonnza, suponé que todos compran el mismo producto (articulo= ("cuchillo",15) . y no, no lo vi en la cursada, pero estoy en un curso que medio te tiran los temas y arreglate, y acá estamos, haciendo sombras chinescas.
17-04-2011 23:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Aye Sin conexión
Rock Admin
.
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.154
Agradecimientos dados: 71
Agradecimientos: 429 en 53 posts
Registro en: Mar 2008
Mensaje: #8
RE: [Paradigmas] Duda con Haskell
De seguro que si te dieron ese ejercicio y todavía no te explicaron estas funciones es porque deberíamos pensarlo de otra manera.... De todos modos te comento:

map transforma una lista en otra aplicando una función a todos sus elementos.. POR EJEMPLO podríamos tener una función que sea +2 y una lista que sea [1..5], si hacemos map (+2) [1..5] lo que vamos a tener como resultado es [3, 4, 5, 6, 7]. Con esta misma lógica vos en vez de un (+2) podrías generar una función que te devuelva una tupla de persona, pero con el importe restado... algo así como leRestoElImporteA miCliente miImporte y ahí adentro hacer el cálculo....

El filter te devuelve como resultado una nueva lista que está filtrada por una función... POR EJEMPLO si querés saber qué valores son mayores a 5 en la lista[3..8], podés hacer un:
filter (>5) [3..8]
De esa manera, tu resultado será otra lista con los valores [6,7,8]... Con este filter lo que podés hacer es acotar a todos los clientes que después de haberle restado el importe del producto (es decir, después de haber hecho el map), su importe sea mayor a 10....

Sintácticamente se me complica porque no tengo hugs instalado y no quiero mandar fruta.... Si te dijeron que lo hagas y no te comentaron de estas funciones es porque definitivamente podrías hacerlo por otro medio... Si es así avisame y la pensamos de nuevo =)

Por último, te dejo un documento en el cual se explica un poco mejor estas funciones (llamadas, Funciones de Orden Superior): LINK AL DOCUMENTO

Espero que se haya entendido, cualquier cosa me consultás!!!

[Imagen: digitalizartransparent.png]
(Este mensaje fue modificado por última vez en: 17-04-2011 23:40 por Aye.)
17-04-2011 23:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza En línea
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.112
Agradecimientos dados: 763
Agradecimientos: 731 en 316 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #9
RE: [Paradigmas] Duda con Haskell
si todos compran el mismo articulo, tonces tenes que hacer que el cliente compre el articulo, y tras ello ver que su plata sea 10

entonces

listaPlatudos clientes = [(cliente, cobroarticulo un cliente articulo) | (cliente, plata)<- ((plataclientes cliente) - (clientes, cobroarticulo uncliente articulo)) >10]

ya que con la funcion solo te devuelve cuanta plata le quedaria si compras, podes con eso ver si le queda mas de 10 tras comprar, y como no actualiza la lista al comprrar, la liusta que devuelva tiene que tener la plata restada de lo que compraste, asique especificas la tupla y pones la plata que le quedaria (que es la que le devuelve la funcion)

[Imagen: v34BEFt.gif]
17-04-2011 23:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
batty Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 212
Agradecimientos dados: 1
Agradecimientos: 8 en 7 posts
Registro en: Mar 2010
Mensaje: #10
RE: [Paradigmas] Duda con Haskell
Modifiqué esta linea asi:


cobroArticulo plat articulo = plat - devolverPrecio articulo



y después agregué esto:


clienteActualizado (nombre,plata) = (nombre,cobroArticulo plata articulo)
plata = snd
listaPlatudos clientes = [ clienteActualizado uncliente | uncliente <- clientes , plata (clienteActualizado uncliente) > 10 ]



Y listaPlatudos clientes te devuelve


[("pepito",35),("dora",15)]



thumbup3

[Imagen: firmbatty.png]
(Este mensaje fue modificado por última vez en: 18-04-2011 01:37 por batty.)
18-04-2011 01:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alter Sin conexión
Empleado del buffet
Sin estado :(
*

Otra
Facultad Regional Haedo

Mensajes: 19
Agradecimientos dados: 0
Agradecimientos: 0 en 0 posts
Registro en: Aug 2008
Mensaje: #11
RE: [Paradigmas] Duda con Haskell
Muchísimas gracias por las respuestas.. el problema principal que tenía, era una opción marcada por defecto en el WinHugs...que me tiraba error a cada rato..
18-04-2011 20:11
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.