23-09-2013, 17:48
Hola!! Estoy tratando de resolver un practico de la cátedra de los Miércoles[/code] y Jueves por la noche cuatrimestral.
8) Se quiere poder hacer las siguientes consultas a partir de un pasaje, que es una tupla con la clase de asiento y una lista de vuelos con escalas:
Precio total (suma de los precios de cada vuelo con esa clase de asiento)
Tiempo de combinación total (suma de las horas de diferencia entre vuelos)
Desarrollar una función sumatoriaDe/2, definir su tipo y usarla para resolver las consultas de los puntos a y b sin definir funciones auxiliares (de ser necesario puede usar expresiones lambda).
> sumatoriaDe (*2) [1,2,3]
12
El tema que tengo que hacer 1 y solo una funcion que resuelva las 2 cosas, me dijeron que use foldl y lambdas, pero son todo un lado oscuro para mi las lambdas y el foldl en conjunto... me pierdo y mucho!!
Espero que alguno me pueda dar un puntapie y guiarme para poder resolver este punto!!
El link del tp: https://docs.google.com/document/d/1xz18...4BUZ0/edit
GRACIAS!!
8) Se quiere poder hacer las siguientes consultas a partir de un pasaje, que es una tupla con la clase de asiento y una lista de vuelos con escalas:
Precio total (suma de los precios de cada vuelo con esa clase de asiento)
Tiempo de combinación total (suma de las horas de diferencia entre vuelos)
Desarrollar una función sumatoriaDe/2, definir su tipo y usarla para resolver las consultas de los puntos a y b sin definir funciones auxiliares (de ser necesario puede usar expresiones lambda).
> sumatoriaDe (*2) [1,2,3]
12
type Vuelo = (Int,String,CiudadHorario,CiudadHorario,Double)
type CiudadHorario = (String,(Fecha,Hora))
type Fecha = (Integer,Int,Int)
type Hora = (Double, Double)
-- algunos vuelos para probar
lan4170 = (4170, "lan", ("buenos aires",((2013,12,24),(17,15))), ("londres",((2013,12,25),(5,15))), 4000) :: Vuelo
iberia5800 = (5800, "iberia", ("londres",((2013,12,25),(5,45))), ("barcelona",((2013,12,25),(6,55))), 500) :: Vuelo
iberia5801 = (5801, "iberia", ("londres",((2013,12,25),(7,00))), ("barcelona",((2013,12,25),(8,10))), 500) :: Vuelo
xM5801 = (5801, "iberia", ("londres",((2013,12,26),(7,00))), ("roma",((2013,12,26),(8,10))), 500) :: Vuelo
combinaciones [x] = []
combinaciones (x:xs) = (llegada x , salida (head xs)) :combinaciones xs
pasaje = (economica, [lan4170, iberia5801, xM5801])
-- combinaciones del pasaje = [(("londres",((2013,12,25),(5,15))),("londres",((2013,12,25),(7,0))))]
-- ACA EMPIEZA EL PUNTO 8.
tiempoCombinacion (asciento, vuelos) = sumaEntreVuelos(combinaciones vuelos)
sumaEntreVuelos [] = 0
sumaEntreVuelos (x:xs) = horasDeDiferencia ((snd.fst) x) ((snd.snd) x) + sumaEntreVuelos xs
sumatoriaDe :: Num c => (t -> a -> c) -> (t, [a]) -> c
sumatoriaDe fun (asciento, lista) = (sum.map(fun asciento)) lista
El tema que tengo que hacer 1 y solo una funcion que resuelva las 2 cosas, me dijeron que use foldl y lambdas, pero son todo un lado oscuro para mi las lambdas y el foldl en conjunto... me pierdo y mucho!!
Espero que alguno me pueda dar un puntapie y guiarme para poder resolver este punto!!
El link del tp: https://docs.google.com/document/d/1xz18...4BUZ0/edit
GRACIAS!!