UTNianos

Versión completa: como escribir lista de listas?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
buenas, haciendo la guia de ejercicios no se como encarar este tipo de enunciado

Armar una función promedios/1, que dada una lista de listas me devuelve la lista de los
promedios de cada lista-elemento



ese lo hice con recursividad y con un map, pero seguro hay una forma mejor


promedio1lista (x:xs) = (x + sum xs) `div` (1 + length xs)
promedios = map promedio1lista




Pero en este


Definir la función mejoresNotas, que dada la información de un curso devuelve la lista con la
mejor nota de cada alumno. P.ej.



Como defino que sea una lista de listas para despues analizarla ?

Igual que una lista comun (x:xs) ?

gracias
No sé si entendí bien, pero si mapeás la lista de listas con un maximum no sale??? de esa forma no la tenés que abrir por pattern matching, directamente le ponés al parámetro cualquier nombre, total si la estás mapeando con un maximum se va a dar cuenta que espera una lista de lista
AHI TE VAN CAPO !!!! TE LOS DEJO TODO CON RECURSIVIDAD, SI O SI TENES QUE DOMINAR ESO MAS QUE MEZCLARLO CON UN MAP
ESPERO TE SIRVA LOCURA.

promedios [] = []
promedios (xs:xss) = promedioLista xs:promedios xss

promedioLista unaLista = sumatoria unaLista / longitud unaLista

sumatoria [] = 0
sumatoria (x:xs) = x + sumatoria xs

longitud [] = 0
longitud (_:xs) = 1 + longitud xs

mejoresNotas [] = []
mejoresNotas (xs:xss) = mejorNota xs:mejoresNotas xss

mejorNota [x] = x
mejorNota (x:xs) | x >= mejorNota xs = x
| otherwise = mejorNota xs
Para mí es mas importante orden superior (el map) que recursividad.

Para probar tu función podés hacer

notass = [[5,6,7], [4,10,5], [8,8,8]]

La podés tratar como cualquier otra lista, entiende los mismos mensajes.
Por ejemplo

>:t notass
[[Int]]

>head notass
[5,6,7]
Coincido con Ichiluk, yo le daría más importancia a hacer map que a hacerlo por recursividad..
(12-05-2013 12:44)La Tota escribió: [ -> ]AHI TE VAN CAPO !!!! TE LOS DEJO TODO CON RECURSIVIDAD, SI O SI TENES QUE DOMINAR ESO MAS QUE MEZCLARLO CON UN MAP
ESPERO TE SIRVA LOCURA.

promedios [] = []
promedios (xs:xss) = promedioLista xs:promedios xss

promedioLista unaLista = sumatoria unaLista / longitud unaLista

sumatoria [] = 0
sumatoria (x:xs) = x + sumatoria xs

longitud [] = 0
longitud (_:xs) = 1 + longitud xs

mejoresNotas [] = []
mejoresNotas (xs:xss) = mejorNota xs:mejoresNotas xss

mejorNota [x] = x
mejorNota (x:xs) | x >= mejorNota xs = x
| otherwise = mejorNota xs

Claro porque a la catedra le encanta que uses recursividad en vez de funciones de orden superior roll Screw declarative programming!
igual yo dije dominar recursividad sin mezclarlo con map.no dije no darle bola al map, filter y todas esas.

chicos ya sabemos que es importante saber usar las funciones de orden superior, en todos los puntos podes usar orden superior.
En el parcial cuando te dicen USE SOLO RECURSIVIDAD creo que no esta demas saber usarla. me parece ...
URLs de referencia