Вы находитесь на странице: 1из 17

Sinnimos de Tipo

Un sinnimo de tipo introduce un nuevo


nombre para un tipo existente.
type Asignatura= [String]
matriculado :: Asignatura
matriculado = ["rosa","marcela","luis"]
Main> matriculado
["rosa","marcela","luis"]
Lic. Wilber Ramos Lovn
Definicin de Tipos Enumerados
data Dias =
Lunes|Martes|Mircoles|Jueves|Viernes|Sba
do|Domingo deriving Show
laborables
=[Lunes,Martes,Mircoles,Jueves,Viernes]
Main> :t laborables
laborables :: [Dias]
Main> laborables
[Lunes,Martes,Mircoles,Jueves,Viernes]
Lic. Wilber Ramos Lovn
Das es un constructor de Tipos
La clusula deriving Show es necesaria
para que Hugs pueda mostrar por pantalla
los valores del tipo
finSemana :: Das -> Bool
finSemana Sbado = True
finSemana Domingo= True
finSemana _ = False
Main> finSemana Martes
False
Lic. Wilber Ramos Lovn
Podemos definir nuevos Tipos uniendo
dos tipos existentes
data LetraEntero = Letra Char |Entero Int
deriving Show
listaMixta=[Letra 'a', Letra 'f',Entero 3,Letra
'p', Entero 8]
Main> :t listaMixta
listaMixta :: [LetraEntero]
Main> listaMixta
[Letra 'a',Letra 'f',Entero 3,Letra 'p',Entero 8]
Lic. Wilber Ramos Lovn
Productos
data Racional = Quebrado Int Int deriving Show
Main> :t Quebrado
Quebrado :: Int -> Int -> Racional
numerador :: Racional -> Int
numerador (Quebrado x _) = x
denominador :: Racional -> Int
denominador (Quebrado _ y) = y
Lic. Wilber Ramos Lovn
Main> numerador ( Quebrado 3 8)
3
Main> denominador ( Quebrado 5 7)
7
por :: Racional -> Racional -> Racional
por (Quebrado a b) (Quebrado c d) =
Quebrado (a*c) (b*d)
Main> por (Quebrado 2 3) (Quebrado 4 5)
Quebrado 8 15
Lic. Wilber Ramos Lovn
type Nombre = String
type Paterno = String
type Materno = String
type Edad = Int
data Personas = Persona Nombre Paterno
Materno Edad deriving Show
Main> :t Persona
Persona :: Nombre -> Paterno -> Materno ->
Edad -> Personas
Main> Persona "Martha" "Tapia" "Gallegos"
24
Persona "Martha" "Tapia" "Gallegos" 24
Lic. Wilber Ramos Lovn
Haskell permite nombrar las distintas
componentes de un tipo. Por ejemplo :
type Nombre = String
type Paterno = String
type Materno = String
type Edad = Int
data Personas = Persona { nombre :: Nombre
, paterno :: Paterno
, materno :: Materno
, edad :: Edad
} deriving Show
Lic. Wilber Ramos Lovn
paola:: Personas
paola= Persona { nombre = Paola"
, paterno = Salas"
, materno = Valencia"
, edad = 17 }
Main> paola
Persona {nombre = "Paola",
paterno = "Salas", materno =
"Valencia", edad = 17}
Lic. Wilber Ramos Lovn
Adems se introducen automticamente
las funciones selectoras para las
componentes :
Main> :t paola
paola :: Personas
Main> edad paola
17
Main> paterno paola
"Salas"
Lic. Wilber Ramos Lovn
Se puede construir un nuevo valor a partir
de otro existente
Main> karla {paterno = "Carpio", materno =
"Paredes" , edad = 28}
Persona{nombre="Karla",paterno="Carpio",materno
="Paredes",edad=28}
No afecta para nada el valor de karla como ocurrira
en un lenguaje imperativo
Main> karla
Persona{nombre="Karla",paterno="Torres",materno
="Martinez",edad=25}
Lic. Wilber Ramos Lovn
Los identificadores de constructores
binarios de datos tambin pueden ser
simblicos :
data Complejo = Float :- Float deriving Show
origen :: Complejo
origen = 0.0 :- 0.0
parteReal :: Complejo -> Float
parteReal (x:-_) = x
parteImaginaria :: Complejo -> Float
parteImaginaria (_:-y) = y
Lic. Wilber Ramos Lovn
Main> :t (:-)
(:-) :: Float -> Float -> Complejo
Main> 2.5 :- 7.3
2.5 :- 7.3
Main> parteReal (4.3 :- 7.5)
4.3
Main> parteImaginaria (4.5:-7.9)
7.9
Lic. Wilber Ramos Lovn
El constructor de tipos Figura tiene cuatro
variantes. Cada constructor de datos tiene
su aridad
type Radio = Float
type Lado = Float
data Figura = Crculos Radio
|Cuadrados Lado
|Rectngulos Lado Lado
|Puntos
deriving Show
Lic. Wilber Ramos Lovn
crculo :: Figura
crculo = Crculos 4.5
Main> crculo
Crculos 4.5
listaFiguras :: [Figura]
listaFiguras = [Crculos 7.5, Cuadrados
3.2, Rectngulos 4.1 5.6]
Main> listaFiguras
[Crculos 7.5,Cuadrados 3.2,Rectngulos
4.1 5.6]
Lic. Wilber Ramos Lovn
Observe los tipos de constructores
introducidos
Main> :t Crculos
Crculos :: Radio -> Figura
Main> :t Cuadrados
Cuadrados :: Lado -> Figura
Main> :t Rectngulos
Rectngulos :: Lado -> Lado -> Figura
Main> :t Puntos
Puntos :: Figura
Lic. Wilber Ramos Lovn
Problemas
1. Defina dos funciones para calcular el rea y
permetro de una figura.
2. Defina un nuevo tipo de dato que se llamar
temperatura.Este tipo de dato representar las
temperaturas en grados Fahrenheit, Centgrados,
Kelvin.
Para representar este tipo de dato recuerde que:
32 Fahrenheit = 0 Centgrados
273 Kelvin = 32 Centgrados
Sobre este tipo de dato defina funciones que
transformen grados Centgrados a Kelvin y
Fahrenheit y viceversa.
Lic. Wilber Ramos Lovn

Вам также может понравиться