Datos compuestos de Haskell como modelo de datos
From Ibbddunq
(Difference between revisions)
Revision as of 21:49, 2 January 2008
Este programa incluye una DB sobre notas de alumnos, tomando como modelo el sistema de tipos de Haskell. También incluye algunas consultas sobre la BD
data CursadaAlumno = Cursada Legajo Materia Cuatrimestre Nota | NoCurso Legajo Materia deriving (Eq, Show) data ExamenIntegradorAlumno = ExamenIntegrador Legajo Materia Cuatrimestre Nota deriving (Eq, Show) data Alumno = Alumno Legajo Nombre Fecha deriving (Eq, Show) type Materia = String type Cuatrimestre = (Int,Int) type Nota = Int type Legajo = String type Nombre = String type Fecha = (Int, Int, Int) registroCursadas = [ Cursada "128/1" "Orga1" (2008,01) 9, Cursada "131/4" "Orga1" (2008,01) 5, Cursada "143/2" "IPr" (2008,01) 6, Cursada "201/9" "IPr" (2008,01) 8, Cursada "322/8" "IPr" (2008,01) 2, Cursada "128/1" "IPr" (2008,01) 6 ] registroExamenesIntegradores = [ ExamenIntegrador "143/2" "IPr" (2008,01) 5, ExamenIntegrador "128/1" "IPr" (2008,01) 2 ] alumnos = [ Alumno "143/2" "Juan Lopez" (23,2,1988), Alumno "201/9" "Roque Granata" (15,6,1981), Alumno "322/8" "Agustin Bal" (2,9,1984), Alumno "128/1" "Jose de Zer" (18,11,1977), Alumno "131/4" "Lucas E. Rito" (21,12,1987) ] nombre legajo = (nombreAlumno . head . (filter ((legajo ==).legajoAlumno))) alumnos nombreAlumno (Alumno _ nombre _) = nombre legajoAlumno (Alumno leg _ _) = leg cursadas alumno materia | null cp = [NoCurso alumno materia] | otherwise = cp where cp = filter (esCursada alumno materia) registroCursadas examenes alumno materia = filter (esExamen alumno materia) registroExamenesIntegradores esCursada alumno materia (Cursada al mat _ _) = alumno == al && materia == mat esExamen alumno materia (ExamenIntegrador al mat _ _) = alumno == al && materia == mat aprobo alumno materia = any aproboCursada (cursadas alumno materia) || any aproboExamenIntegrador (examenes alumno materia) aproboCursada (Cursada _ _ _ nota) = nota >= 7 aproboCursada (NoCurso _ _) = False aproboExamenIntegrador (ExamenIntegrador _ _ _ nota) = nota >= 4 planillaCurso materia cuatrimestre = [ (nombre leg, nota) | (Cursada leg _ _ nota) <- curso materia cuatrimestre ] curso materia cuatrimestre = filter esCurso registroCursadas where esCurso (Cursada _ mat cuat _) = mat == materia && cuat == cuatrimestre