Clase 2 Funcional

¿Qué vimos?

  • Expresiones Lambda
  • Aplicación Parcial
  • Funciones de Orden Superior
  • Variables de Tipo

Resumen de clase (AQUÍ)

Tarea

TP2 a entregar impreso (.hs y consultas)

Para la resolución del TP se pueden usar las siguientes funciones:

length :: [a] -> Int
Nos dice la cantidad de elementos de una lista.
Ejemplo:
>length [1,5,7]
3

elem :: a -> [a] -> Bool
Nos dice si un elemento se encuentra en una lista.
Ejemplo:
>elem 5 [1,5,7]
True

not :: Bool -> Bool
Niega un booleano.
Ejemplo:
>not (5 > (length [1,5,7]))
False

all :: (a -> Bool) -> [a] -> Bool
Dada una condición f y una lista xs, nos dice si todos los elementos de xs cumplen la condición f (o sea, si devuelven True)
Ejemplo:
>all (>6) [1,5,7]
False

any :: (a -> Bool) -> [a] -> Bool
Dada una condición f y una lista xs, nos dice si alguno de los elementos de xs cumple la condición f (o sea, si alguno devuelve True)
Ejemplo:
>any (>6) [1,5,7]
True

map :: (a -> b) -> [a] -> [b]
Dada una función f y una lista xs, nos devuelve otra lista resultante de aplicar  f a cada elemento de xs.
Ejemplo:
>map (+2) [1,5,7]
[3,7,9]

filter :: (a -> Bool) -> [a] -> [a]
Dada una condición f y una lista xs, nos devuelve otra lista compuesta sólo por los elementos de xs que cumplen la condición f.
Ejemplo:
>filter (>2) [1,5,7]
[5,7]


Tenemos una lista de películas sacadas de un sitio web. Cada película está representada por una tupla con su nombre y una lista de puntajes que les pusieron los visitantes del sitio.

peliculas = [("Inception", [8, 7, 9, 6, 8, 10, 9, 10, 7, 9, 10]), ("I love you Phillip Morris",[5, 8, 8, 10, 7, 9]), ("Black Swan", [5, 10, 6, 9, 7, 6, 10, 8, 7, 6]), ("The King's Speach", [10, 7, 8, 8, 9, 10, 6, 7, 10, 8]), ("No strings attached", [6, 7, 8, 7, 5, 6, 7]), ("The Chronicles of Narnia", [3, 6]) ]

Se deben realizar las siguientes funciones:

  1. puntajePromedio: dada una película, nos dice el promedio de los puntajes que obtuvo.
  2. esRecomendable: dada una película, devuelve True si el promedio de la película es mayor a 8 y si tuvo al menos 10 puntajes.
  3. sonTodasPasables: dada una lista de películas, nos dice si todas son pasables (una película es pasable cuando tiene más de 6 de promedio).
  4. hayAlgunaPopular: dada una lista de películas, nos dice si alguna de ellas tiene más de 100 puntajes.
  5. puntajesTotales: dada una lista de películas, nos devuelve otra lista con la suma de los puntajes de cada una
  6. recomendables: dada una lista de películas, nos devuelve una lista que contiene sólo las recomendables.
  7. riesgosas = dada una lista de películas, nos devuelve otra lista con las películas riesgosas (una película es riesgosa si alguien le puso 1 de puntaje)
  8. noHayRecomendables: dada una lista de películas, nos dice si ninguna de ellas es recomendable.

Es condición de aprobación usar al menos una vez los siguientes conceptos:

  • orden superior
  • aplicación parcial
  • composición
  • expresiones lambda

Nota: para los que no hicieron el desafío de la clase anterior, si tienen problemas con el promedio de los puntajes revisen este artículo de la wiki.

Resumen de clase

Google Document



Ċ
Germán Leiva,
9 may. 2011 16:23
Comments