EJercicio 13- Practico 2

EJercicio 13- Practico 2

de Santiago Javier Alaniz Gonzalez -
Número de respuestas: 1

Dado el data Triangulo:

data Triangulo=Equi Int|Iso Int Int|Esca Int Int Int
  deriving (Eq,Ord,Show)

Hay que implementar una funcion isos::[Triangulo] -> Int, que devuelva la cantidad de isósceles en una lista de triángulos. Primero por comprension y luego usando filter, el problema es que no se como preguntar por el subtipo del elemento, o como se diga no tengo idea, porque cuando lo defino por comprensión hago algo del estilo:

isos::[Triangulo] -> Int
isos lista = length [x | x<-lista, x == Triangulo Iso]

La pregunta es como hago una funcion que dado un elemento pueda responder con true false si este es del subtipo correspodniente. ej si x es Iso true, false en otro caso


En respuesta a Santiago Javier Alaniz Gonzalez

Re: EJercicio 13- Practico 2

de Marcos Viera - InCo -
Podés hacer pattern matching para determinar si se usó el constructor Iso para construir ese Triangulo.
La función que pedís sería:

isIso (Iso _ _) = True
isIso _ = False

que lo que indica es que si el argumento que se le pasa es un Triangulo construido con el constructor Iso (sin importar sus parámetros) retorna True y en otro caso retorna False.