Advertisement
Guest User

pde tp comentarios

a guest
Apr 24th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. type Pelicula = (String, [Int])
  2. type Maraton = [Pelicula]
  3.  
  4. titulo :: (String, [Int]) -> String
  5. titulo = fst
  6.  
  7. calificaciones :: (String, [Int]) -> [Int]
  8. calificaciones = snd
  9.  
  10. cantidadCalificaciones :: Pelicula -> Int
  11. cantidadCalificaciones = length . calificaciones
  12. --Comentario / Correccion:
  13. --Esto es mas que nada un comentario, si querias utilizar pattern matching podrias haber hecho:
  14. --cantidadCalificaciones :: Pelicula -> Int
  15. --cantidadCalificaciones (_, calificaciones) = length calificaciones
  16. --Va lo mismo para cualquier funcion del tipo Pelicula -> Algo
  17. --En el parcial cualquiera de las dos opciones esta bien
  18.  
  19. sumaCalificaciones :: Pelicula -> Int
  20. sumaCalificaciones = sum . calificaciones
  21.  
  22. laMejorCalificacion :: Pelicula -> Int
  23. laMejorCalificacion = maximum . calificaciones
  24.  
  25. laPeorCalificacion :: Pelicula -> Int
  26. laPeorCalificacion = minimum . calificaciones
  27.  
  28. esPopular :: Pelicula -> Bool
  29. esPopular = (>5) . cantidadCalificaciones
  30.  
  31. estaBuena :: Pelicula -> Bool
  32. estaBuena pelicula = ((>7) . length . titulo) pelicula && (esPopular pelicula)
  33.  
  34. -- ### ERROR por el tipo de numero Int
  35. puntaje :: Pelicula -> Int
  36. --puntaje pelicula = (sumaCalificaciones pelicula) / (cantidadCalificaciones pelicula)
  37.  
  38. --Comentario / Correccion:
  39. --Lo que vos hiciste en un parcial es totalmente valido, pero para hacerlo en codigo hay que hacer una cosa mas, la funcion te deberia quedar como:
  40. --puntaje :: Pelicula -> Int
  41. --puntaje (_, calificaciones) = promedio calificaciones
  42.  
  43. --promedio algo = fromIntegral(sum algo) / fromIntegral(length algo)
  44.  
  45. --Esto te lo digo mas que nada para que lo tengas en cuenta por si en el TP se les pide algo parecido
  46. --Tambien como mas adelante vas a tener que sacar otro promedio, te convendria abstraer ese comportamiento para evitar repetir logica
  47.  
  48.  
  49.  
  50. dispersion :: Pelicula -> Int
  51. dispersion pelicula = (laMejorCalificacion pelicula) - (laPeorCalificacion pelicula)
  52.  
  53.  
  54.  
  55. -- ###
  56. -- no se me ocurrió como agregar la cola, y a la vez devolver el tipo Pelicula
  57. --calificar :: Int -> Pelicula
  58. calificar numero pelicula = (calificaciones pelicula) : numero
  59.  
  60. --Comentario / Correccion:
  61. --Bien, aca podrias haber hecho algo como esto:
  62. --calificar :: Int -> Pelicula -> Pelicula
  63. --calificar calificacion (titulo, calificaciones) = (titulo, calificaciones : calificacion)
  64.  
  65.  
  66.  
  67. -- ###
  68. -- recuerdo que habian dicho q se podia hacer con pattern matching,
  69. -- pero es como se me ocurrió
  70. sumaCalificacion :: Int -> Int
  71. sumaCalificacion numero
  72.     | numero == 9 || numero == 10 = 10
  73.     | numero == 1 = 1
  74.     | otherwise = numero + 2
  75.  
  76. -- Comentario / Correccion:
  77. -- Si bien lo tuyo no esta mal, para este caso, es mas simple y mas declarativo optar por la resolucion con pattern matching, quedaria algo como:
  78. --sumarSegunCalificacion :: Int -> Int
  79. --sumarSegunCalificacion 1 = 1
  80. --sumarSegunCalificacion calificacion = min 10 (calificacion + 2)
  81. --Otra cosa que estaria bueno que tengas en cuenta es que el nombre de la funcion tiene que ser acorde con lo que va a hacer la funcion, si bien el nombre sumaCalificacion no esta mal y describe
  82. --mas o menos el comportamiento de la funcion, lo podrias mejorar poniendo algo como sumarSegunCalificacion
  83.  
  84.  
  85.  
  86. -- ###
  87. -- Entiendo que estoy devolviendo las calificaciones en vez la pelicula (que es quien
  88. -- contiene a las calificaciones)
  89. --manijear :: Pelicula -> Pelicula
  90. manijear pelicula = map (sumaCalificacion) (calificaciones pelicula)
  91.  
  92. --Comentario / Correccion:
  93. --La solucion a esto es mas o menos parecida a la de la funcion calificar, seria algo asi:
  94. --manijear (titulo, calificaciones) = (titulo, map sumarSegunCalificacion calificaciones)
  95.  
  96.  
  97.  
  98. valeLaPena :: Maraton -> Bool
  99. valeLaPena peliculas = (estaBuena (head peliculas)) && (estaBuena (last peliculas))
  100.  
  101. --Comentario / Correccion:
  102. --Aca podrias sacar algunos parentesis, te queria asi:
  103. --valeLaPena peliculas = estaBuena (head pelicular) && estaBuena (last peliculas)
  104.  
  105.  
  106.  
  107. coincideNombre :: String -> Pelicula -> Bool
  108. coincideNombre nombre pelicula = nombre == (titulo pelicula)
  109.  
  110. pertenece :: String -> Maraton -> Bool
  111. pertenece nombrePelicula maraton = any (coincideNombre nombrePelicula) maraton
  112.    
  113. valoracion :: Maraton -> Int
  114. --valoracion maraton = sum (map (sumaCalificaciones) maraton)
  115. valoracion = sum . (map (sumaCalificaciones))
  116.  
  117. --Comentario / Correccion:
  118. --Este punto era medio confuso con lo que pedia, la resolucion seria algo asi:
  119. --valoracion :: Maraton -> Float
  120. --valoracion maraton = (promedio . map puntaje) maraton
  121.  
  122.  
  123.  
  124. dispersionMenorADos :: Maraton -> Maraton
  125. dispersionMenorADos = filter ((<2) . dispersion)
  126.  
  127. maratonDeOscar :: Maraton -> Bool
  128. maratonDeOscar maraton = all ((>8) . puntaje) (dispersionMenorADos maraton)
  129. --Comentario / Correccion:
  130. --Aca vuelvo a insistir con lo de la declaracion, si bien estas delegando parte de la solucion, sigue quedando algo de detalle algoritmico que se puede abstraer en una nueva funcion y hacer que quede
  131. --una solucion mas "limpia", por ejemplo asi:
  132. --maratonDeOscar :: Maraton -> Bool
  133. --maratonDeOscar maraton = all puntajeSuperiorA8 (dispersionMenorADos maraton)
  134.  
  135. --puntajeSuperiorA8 :: Pelicula -> Bool
  136. --puntajeSuperiorA8 pelicula = ((>8) . puntaje) pelicula
  137.  
  138.  
  139.  
  140. {- Ultimas Aclaraciones
  141.  
  142. Estaba bastante bien, todavia te falta aplicar un poco mas el concepto de delegar y abstraer comportamientos.
  143. Por otro lado, veo que entendiste bastante bien el tema de la composicion, bien ahi!
  144. Como esto no era un TP, sino un ejercicio integrador, no tiene nota :P  
  145.  
  146. -}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement