Tema 3: Tipos y clases
Informática (2016–17)
José A. Alonso Jiménez
Grupo de Lógica Computacional
Departamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
IM Tema 3: Tipos y clases
Tema 3: Tipos y clases
1. Conceptos básicos sobre tipos
2. Tipos básicos
3. Tipos compuestos
Tipos listas
Tipos tuplas
Tipos funciones
4. Parcialización
5. Polimorfismo y sobrecarga
Tipos polimórficos
Tipos sobrecargados
6. Clases básicas
2 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
¿Qué es un tipo?
Un tipo es una colección de valores relacionados.
Un ejemplo de tipos es el de los valores booleanos: Bool
El tipo Bool tiene dos valores True (verdadero) y False (falso).
v :: T representa que v es un valor del tipo T y se dice que “v
tiene tipo T”.
Cálculo de tipo con :type
Prelude> :type True
True :: Bool
Prelude> :type False
False :: Bool
El tipo Bool -> Bool está formado por todas las funciones cuyo
argumento y valor son booleanos.
Ejemplo de tipo Bool -> Bool
Prelude> :type not
not :: Bool -> Bool
3 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
¿Qué es un tipo?
Un tipo es una colección de valores relacionados.
Un ejemplo de tipos es el de los valores booleanos: Bool
El tipo Bool tiene dos valores True (verdadero) y False (falso).
v :: T representa que v es un valor del tipo T y se dice que “v
tiene tipo T”.
Cálculo de tipo con :type
Prelude> :type True
True :: Bool
Prelude> :type False
False :: Bool
El tipo Bool -> Bool está formado por todas las funciones cuyo
argumento y valor son booleanos.
Ejemplo de tipo Bool -> Bool
Prelude> :type not
not :: Bool -> Bool
3 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
¿Qué es un tipo?
Un tipo es una colección de valores relacionados.
Un ejemplo de tipos es el de los valores booleanos: Bool
El tipo Bool tiene dos valores True (verdadero) y False (falso).
v :: T representa que v es un valor del tipo T y se dice que “v
tiene tipo T”.
Cálculo de tipo con :type
Prelude> :type True
True :: Bool
Prelude> :type False
False :: Bool
El tipo Bool -> Bool está formado por todas las funciones cuyo
argumento y valor son booleanos.
Ejemplo de tipo Bool -> Bool
Prelude> :type not
not :: Bool -> Bool
3 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
¿Qué es un tipo?
Un tipo es una colección de valores relacionados.
Un ejemplo de tipos es el de los valores booleanos: Bool
El tipo Bool tiene dos valores True (verdadero) y False (falso).
v :: T representa que v es un valor del tipo T y se dice que “v
tiene tipo T”.
Cálculo de tipo con :type
Prelude> :type True
True :: Bool
Prelude> :type False
False :: Bool
El tipo Bool -> Bool está formado por todas las funciones cuyo
argumento y valor son booleanos.
Ejemplo de tipo Bool -> Bool
Prelude> :type not
not :: Bool -> Bool
3 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
Inferencia de tipos
Regla de inferencia de tipos
f :: A → B e :: A
f e :: B
Tipos de expresiones:
Prelude> :type not True
not True :: Bool
Prelude> :type not False
not False :: Bool
Prelude> :type not (not False)
not (not False) :: Bool
Error de tipo:
Prelude> :type not 3
Error: No instance for (Num Bool)
Prelude> :type 1 + False
Error: No instance for (Num Bool)
4 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
Inferencia de tipos
Regla de inferencia de tipos
f :: A → B e :: A
f e :: B
Tipos de expresiones:
Prelude> :type not True
not True :: Bool
Prelude> :type not False
not False :: Bool
Prelude> :type not (not False)
not (not False) :: Bool
Error de tipo:
Prelude> :type not 3
Error: No instance for (Num Bool)
Prelude> :type 1 + False
Error: No instance for (Num Bool)
4 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
Inferencia de tipos
Regla de inferencia de tipos
f :: A → B e :: A
f e :: B
Tipos de expresiones:
Prelude> :type not True
not True :: Bool
Prelude> :type not False
not False :: Bool
Prelude> :type not (not False)
not (not False) :: Bool
Error de tipo:
Prelude> :type not 3
Error: No instance for (Num Bool)
Prelude> :type 1 + False
Error: No instance for (Num Bool)
4 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
Inferencia de tipos
Regla de inferencia de tipos
f :: A → B e :: A
f e :: B
Tipos de expresiones:
Prelude> :type not True
not True :: Bool
Prelude> :type not False
not False :: Bool
Prelude> :type not (not False)
not (not False) :: Bool
Error de tipo:
Prelude> :type not 3
Error: No instance for (Num Bool)
Prelude> :type 1 + False
Error: No instance for (Num Bool)
4 / 32
IM Tema 3: Tipos y clases
Conceptos básicos sobre tipos
Ventajas de los tipos
Los lenguajes en los que la inferencia de tipo precede a la
evaluación se denominan de tipos seguros.
Haskell es un lenguaje de tipos seguros.
En los lenguajes de tipos seguros no ocurren errores de tipos
durante la evaluación.
La inferencia de tipos no elimina todos los errores durante la
evaluación. Por ejemplo,
Prelude> :type 1 `div` 0
1 `div` 0 :: (Integral t) => t
Prelude> 1 `div` 0
*** Exception: divide by zero
5 / 32
IM Tema 3: Tipos y clases
Tipos básicos
Tipos básicos
Bool (Valores lógicos):
Sus valores son True y False.
Char (Caracteres):
Ejemplos: ’a’, ’B’, ’3’, ’+’
String (Cadena de caracteres):
Ejemplos: "abc", "1 + 2 = 3"
Int (Enteros de precisión fija):
Enteros entre −231 y 231 − 1.
Ejemplos: 123, -12
Integer (Enteros de precisión arbitraria):
Ejemplos: 1267650600228229401496703205376.
Float (Reales de precisión arbitraria):
Ejemplos: 1.2, -23.45, 45e-7
Double (Reales de precisión doble):
Ejemplos: 1.2, -23.45, 45e-7
6 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos listas
Tema 3: Tipos y clases
1. Conceptos básicos sobre tipos
2. Tipos básicos
3. Tipos compuestos
Tipos listas
Tipos tuplas
Tipos funciones
4. Parcialización
5. Polimorfismo y sobrecarga
6. Clases básicas
7 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos listas
Tipos listas
Una lista es una sucesión de elementos del mismo tipo.
[T] es el tipo de las listas de elementos de tipo T.
Ejemplos de listas:
[False, True]
:: [Bool]
['a','b','d'] :: [Char]
["uno","tres"] :: [String]
Longitudes:
La longitud de una lista es el número de elementos.
La lista de longitud 0, [], es la lista vacía.
Las listas de longitud 1 se llaman listas unitarias.
El tipo de una lista no informa sobre su longitud:
Comentarios:
['a','b'] :: [Char]
['a','b','c'] :: [Char]
El tipo de los elementos de una lista puede ser cualquiera:
[['a','b'],['c']] :: [[Char]]
8 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos tuplas
Tema 3: Tipos y clases
1. Conceptos básicos sobre tipos
2. Tipos básicos
3. Tipos compuestos
Tipos listas
Tipos tuplas
Tipos funciones
4. Parcialización
5. Polimorfismo y sobrecarga
6. Clases básicas
9 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos tuplas
Tipos tuplas
Una tupla es una sucesión de elementos.
(T1, T2, . . . , Tn) es el tipo de las n–tuplas cuya componente
i–ésima es de tipo Ti.
Ejemplos de tuplas:
(False,True)
(False,'a',True) :: (Bool,Char,Bool)
:: (Bool,Bool)
Aridades:
La aridad de una tupla es el número de componentes.
La tupla de aridad 0, (), es la tupla vacía.
No están permitidas las tuplas de longitud 1.
Comentarios:
El tipo de una tupla informa sobre su longitud:
('a','b')
('a','b','c') :: (Char,Char,Char)
:: (Char,Char)
El tipo de los elementos de una tupla puede ser cualquiera:
(('a','b'),['c','d']) :: ((Char,Char),[Char])
10 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos funciones
Tema 3: Tipos y clases
1. Conceptos básicos sobre tipos
2. Tipos básicos
3. Tipos compuestos
Tipos listas
Tipos tuplas
Tipos funciones
4. Parcialización
5. Polimorfismo y sobrecarga
6. Clases básicas
11 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos funciones
Tipos funciones
Una función es una aplicación de valores de un tipo en valores de
T1 → T2 es el tipo de las funciones que aplica valores del tipo T1
otro tipo.
en valores del tipo T2.
Ejemplos de funciones:
:: Bool -> Bool
not
isDigit :: Char -> Bool
12 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos funciones
Funciones con múltiples argumentos o valores
Ejemplo de función con múltiples argumentos:
suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5.
suma :: (Int,Int) -> Int
suma (x,y) = x+y
Ejemplo de función con múltiples valores:
deCeroA n es la lista de los números desde 0 hasta n. Por
ejemplo, deCeroA 5 es [0,1,2,3,4,5].
deCeroA :: Int -> [Int]
deCeroA n = [0..n]
Notas:
1. En las definiciones se ha escrito la signatura de las funciones.
2. No es obligatorio escribir la signatura de las funciones.
3. Es conveniente escribir las signatura.
13 / 32
IM Tema 3: Tipos y clases
Tipos compuestos
Tipos funciones
Funciones con múltiples argumentos o valores
Ejemplo de función con múltiples argumentos:
suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5.
suma :: (Int,Int) -> Int
suma (x,y) = x+y
Ejemplo de función con múltiples valores:
deCeroA n es la lista de los números desde 0 hasta n. Por
ejemplo, deCeroA 5 es [0,1,2,3,4,5].
d
Comentarios de: Tema 3: Tipos y clases - Informática (2016–17) (0)
No hay comentarios