[Practico 1][ejercico 7-d]

[Practico 1][ejercico 7-d]

de Maximiliano Damian Bellas Da Cruz -
Número de respuestas: 1

Hola, tengo las siguientes definiciones de tipos algebraicos:

data Curso = Curso (String,Int,Int) --(nom,cod,notaAp)

     deriving (Show,Eq)

data LCursos = LCursos [Curso]

     deriving (Show,Eq)

data Estudiante = Estudiante (String,Int,Int,LCursos) --(nom.ci,aingerso,liscurs)

     deriving (Show,Eq) 

y las siguientes funciones:

getCod :: Curso->Int

getCod (Curso(_,cod,_)) = cod


getNotaCurso :: Curso->Int

getNotaCurso (Curso(_,_,nota)) = nota


getCursosEst :: Estudiante->LCursos

getCursosEst (Estudiante(nom,ci,aing,lc)) = lc


getCursosNota :: Estudiante->Int->[Int]

getCursosNota e nota = [ getCod c | c <-getCursosEst e, getNotaCurso c == nota ]


al cargar el archivo me da error en getCursosNota, donde dice que c <- getCursosEst e espera por [Curso] y recibe LCursos

¿Cuál es el inconveniente con ello?

¿Hay problemas al definir las listas como tipos algebraicos?

¿Cuál sería la solución a ese error?

Gracias

En respuesta a Maximiliano Damian Bellas Da Cruz

Re: [Practico 1][ejercico 7-d]

de Marcos Viera - InCo -

El problema es que LCursos no es una lista, es un tipo algebraico (LCursos) que tiene un constructor (LCursos) que tiene una lista ([Curso]).

Algo que podrías hacer es definir una función para obtener la lista:

lCursos :: LCursos -> [Curso]

lCursos (LCursos xs) = xs


y luego usarla al definir la lista por comprensión

getCursosNota e nota = [ getCod c | c <- (lCursos . getCursosEst) e, getNotaCurso c == nota ]


saludos