UTNianos

Versión completa: Ayuda ej 2.4.1 haskell funciones uso de fold lamnda
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, me pueden guiar con este ejercicio que todavía no logro entender el uso del foldl con el lambda?
2.4.1
En una local de frutas y verduras se conoce el total en kilos de cada uno de los productos que
llegan para vender, se tienen la siguiente información.
productos = [(“manzana”, 50), (“banana”, 30), (“naranja”, 40), (“papa”, 40), (“tomate”, 25)]
Nota: productos es una función constante.
2.4.1. Definir la función totalKilosProductos, me devuelve la cantidad total de kilos de
productos.

Main> totalKilosProductos
185
Nota: a) Resolverlo utilizando foldl + funciones lambda.
b) Resolverlo utilizando map + funciones lambda.

Graciass
A fold uno le pasa una función, un valor inicial y una lista. Lo que hace es pasarle a la función el valor que le pasaste como inicial y el primer o último elemento de tu lista (foldl arranca por el elemento de más izquierda y foldr por el de más a la derecha). El resultado de eso se lo vuelve a pasar a la función junto con el siguiente elemento de la lista, y sigue de esa forma hasta que se acaba la lista y sólo te queda el último resultado.

Si vos(no haskell) calcularas el total de kilos como lo hace foldl, lo harías así:

Empiezo con 0 kg (valor inicial)
Tengo 0 kg y ("manzana", 50)
0 + 50 = 50
Tengo 50 kg y ("banana", 30)
50 + 30 = 80
Tengo 80 kg y (“naranja”, 40)
80 + 40 = 120
Tengo 120 kg y (“papa”, 40)
120 + 40 = 160
Tengo 160 kg y (“tomate”, 25)
160 + 25 = 185
Tengo 185 kg y nada
Total 185

totalKilosProductos va a ser entonces foldl funciónQueSumaKilos 0 productos. Tu función que suma kilos va a tener que recibir la cantidad de kilos que ya tenés y una tupla de producto, de la cual va a tener que extraer los kilos para sumarselos a lo que ya tiene.
si perfecto, muchas gracias por tu respuesta, ya entendì como utilizar foldl + la funcion lambda, ahora estoy teniendo problemas con el punto b) que es lo mismo pero en vez de foldl utilizar map...
deberìa ser algo así:

totalKilosProductos2 productos = map(\acum(_,kilos) -> acum + kilos) productos
Map aplica una función a cada elemento de la lista, función cuyo dominio debe ser del mismo tipo que los elementos que están en la lista. La función que pusiste dentro del map recibe dos argumentos: un int y una tupla, cuando debería recibir uno solo. Deberías usar una función que te de los kilos de cada producto y luego sumarlos todos para obtener el total.
URLs de referencia