Ejercicio Orden Superior y Typeclasses

Enunciado

Dado el siguiente archivo .hs por cada punto explicar porque tiene errores y arreglarlos.
Los errores pueden ser tanto de sintaxis como "teóricos" (esto significa que compila pero IGUAL tiene errores que pueden ser conceptuales). Todos los puntos tienen algo para arreglar.
Explicar con sus palabras los errores y proponer una solución (si la misma solución aplica a varios puntos no repetir, aclarar los puntos que soluciona).
"Explicar con sus palabras" significa que no copien el error que les tira Haskell (en caso de que no compile) sino que expliquen desde los conceptos del paradigma por qué hay un error ahí.

Se intentó elegir nombres que hagan entender por si solos la intención de la función, en caso de no entender qué hace una función determinada por favor avisen a los docentes

-- ejercicioTiposYSuperMegaOrden.hs

--Punto 1 todosIguales elementos = length (filter (head elementos==) elementos) == length elementos --Punto 2 todosIguales' elementos = all (fst elementos==) elementos --Punto 3 todosIguales'' elementos = all (head elementos==otroElemento) elementos --Punto 4 todosIguales''' elementos = all (head.elementos.==) elementos --Punto 5
esNotaAprobada nota = nota >= 4

promedio numeros = sum numeros `div` length numeros
estaAprobado unAlumno = promedio (snd unAlumno) >= 5 todosDesaprobaronAlMenosUnaVez alumnos = any (not.estaAprobado) alumnos --Punto 6 todosDesaprobaronAlMenosUnaVez' alumnos = all (any (4>) (snd unAlumno)) alumnos --Punto 7 todosDesaprobaronAlMenosUnaVez'' alumnos = all (any (\unaNota -> not (estaAprobado unaNota)).snd) alumnos --Punto 8 cantidadDePalindromos palabras = length (filter esPalindromo palabras) esPalindromo unaPalabra | reverse unaPalabra /= unaPalabra = False | otherwise = True --Punto 9 esApestosa (nombre,director,puntuaciones) = all (3>) puntuaciones directorPelicula (nombre,director,puntuaciones) = director
puntosPelicula (nombre,director,puntuaciones = puntuaciones directoresApestosos peliculas = (map (\(n,d,p) -> directorPelicula (n,d,p)) . filter (all (3>).puntosPelicula)) peliculas --Punto 10 find f lista = (head . filter f) lista maximum lista = find (\x -> all (x<=) lista) lista

---------------------------------------------------------------------
-------------------------------------------------------------------
punto 11)

Escribir el tipo de todos los valores a continuación.
Ubicar las siguientes operaciones en el cuadro (puede ser que una operación pueda usarse con más de un valor)

(>=), even, (<), (sqrt.fst), length, (/=), snd, (*4), head, (head. filter null),(filter not), show,

 Valores Tipo Operaciones
3 55  
(14,"mama") (3,"sergio")  
(13.4, "hola")  
1.5 0.4 133.0  
["quien","se","ha","tomado"]
  
[1..10] [4,5,6]  
[True,False,True]  
True False  
[(4,5),(6,7)]  
[]  
 even odd  
 [even,odd]  

Proponer más operaciones que puedan usarse con cada valor.

Comments