TiiposyClases
Páginas: 9 (2044 palabras)
Publicado: 21 de junio de 2015
Tipos Sinónimos
Abstrayendo sobre tipos
type String = [Char]
type Vector = [Int]
type Matriz = [[Int]]
Tipos Sinónimos: Abstrayendo sobre tipos
Claridad
multiplica :: [[Int]] -> [[Int]] -> [[Int]]
type Matriz = [[Int]]
multiplica :: Matriz -> Matriz -> Matriz
Oculta detalles
type Complicado = [([(a,[b,c])],[(d)])]
Permite el uso de argumentos de tipo
type Matriz = [[Int]]
typeMatriz a = [[a]]
Matriz Int
Matriz Char
Matriz String
– Simples
– Recursivos
Tipos Enumerados
( [[String]] o [[[Char]]])
Tipos Enumerados
Tipos Abstractos
Enumerados
Compuestos
( [[Int]])
( [[Char]])
data Dia = Lun | Mar | Mie | Jue | Vie | Sab | Dom
diaSgte:: Dia -> Dia
diaSgte Lun = Mar
diaSgte Mar = Mie
diaSgte Mie = Jue
Constructores de tipo
diaSgte Jue = Vie
En una sesión:
diaSgte Vie =Sab
?diaSgte Jue
diaSgte Sab = Dom
Vie
diaSgte Dom = Lun
Tipos Abstractos Compuestos
Ejercicio
data Dia = Lun | Mar | Mie | Jue | Vie | Sab | Dom
esDescanso :: Dia -> Bool
esDescanso x = x== Dom
Definir una función que reciba una nota y retorne True
si la nota es de reprobación, False en otro caso. La
nota puede ser Numeral (un número entre 0 y 100) o
Literal (‘A’, ‘B’,’C’,’D’).
Nota.-esDescanso :: Dia -> Bool
esDescanso Dom = True
esDescanso _ = False
* Una nota numeral es de aprobación si es superior a 50
* Una nota literal es de aprobación si es A,B o C
1
21/11/2013
Tipos Compuestos
data Nota = Literal Char | Numeral Int deriving Show
reprobado:: Nota -> Bool
Constructores
reprobado (Literal x) = x==‘D'
Tipos componentes
reprobado (Numeral x) = x<51
En una sesión:
?reprobado(Numeral 60)
True
?reprobado (Literal ‘D’)
False
Tipos Abstractos Compuestos
Tipos Abstractos
Compuestos
Los Constructores pueden tener 0 o más
tipos componentes
data Nota = Literal Char
| Numeral Int
| Compuesto Int Char
| Nula
Tipos Abstractos Compuestos
mayor::Int -> Int -> ?
mayor x y | x>y = x
| y>x = y
|otherwise = “Valores iguales”
data Resp2 = Ok2 Bool | Inesperado2 Stringaprobado::Int -> Resp2
aprobado x | x>=51 && x<=100 = Ok2 True
| x>=0 && x<51 = Ok2 False
|otherwise = Inesperado2 “Nota inválida”
data Resp = Ok Int | Inesperado String
mayor::Int -> Int -> Resp
mayor x y | x>y = Ok x
| y>x = Ok y
|otherwise = Inesperado “Valores iguales”
data Resp3 = Ok3 Char | Inesperado3 String
sgteVocal::Char -> Resp3
sgteVocal ‘a’ = Ok3 ‘e’
sgteVocal ‘e’ = Ok3 ‘i’
sgteVocal ‘i’ = Ok3‘o’
sgteVocal ‘o’ = Ok3 ‘u’
sgteVocal ‘u’ = Ok3 ‘a’
sgteVocal _ = Inesperado3 “No es vocal”
Tipos Abstractos Compuestos
Abstrayendo sobre tipos
data Resp = Ok Int | Inesperado String
data Resp2 = Ok2 Bool | Inesperado2 String
data Resp3 = Ok3 Char | Inesperado3 String
data Resp a b = Ok a | Inesperado b
Tipos Abstractos
Ejercicio
Definir una función reprobado que reciba un
valor del tipo Nota ydevuelva Verdad si es
una nota de reprobación, Falso si es una
nota de aprobación y el mensaje nota
inválida si es una nota inválida
mayor::Int -> Int -> Resp Int String
aprobado::Int -> Resp Bool String
sgteVocal::Char -> Resp Char String
2
21/11/2013
Tipos Abstractos
Tipos Abstractos
Compuestos
Compuestos
data Respuesta a b = Ok a | Inesperado b
data Resp a b = Ok a | Inesperado breprobado:: Nota -> Resp Bool String
reprobado (Literal x)
|x==‘A' ||x==‘B' ||x==‘C' ||x==‘D‘ = Ok (x==‘D’)
| otherwise
= Inesperado “Nota inválida”
reprobado (Numeral x)
|x>=0&&x<=100 = Ok (x<51)
|otherwise
= Inesperado “Nota inválida”
Tipos RECURSIVOS: Natural
data Natural = Cero | Suc Natural
Int
0
1
2
3
4
...
Natural
Cero
Suc Cero
Suc(Suc Cero)
Suc(Suc(Suc Cero))
Suc(Suc(Suc(Suc Cero)))
...?reprobado (Numeral 40)
Ok True
?reprobado (Literal ‘A’)
Ok False
?reprobado (Numeral 120)
Inesperado “Nota inválida”
Tipos RECURSIVOS: Natural
Ejercicios
data Natural = Cero | Suc Natural
1. Definir las funciones suma, resta, multiplicación, cociente,
residuo, potencia sobre el tipo Natural:
Tipos con
dominios
infinitos
Tipos RECURSIVOS: Lista
data Lista a = Vacia | Add a (Lista a)
[Int]
[]...
Leer documento completo
Regístrate para leer el documento completo.