TiiposyClases

Páginas: 9 (2044 palabras) Publicado: 21 de junio de 2015
21/11/2013

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.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS