null
US
Iniciar Sesión
Regístrate Gratis
Registro
Hemos detectado que no tienes habilitado Javascript en tu navegador. La naturaleza dinámica de nuestro sitio requiere que Javascript esté habilitado para un funcionamiento adecuado. Por favor lee nuestros
términos y condiciones
para más información.
Siguiente
Copiar y Editar
¡Debes iniciar sesión para completar esta acción!
Regístrate gratis
10678431
Tipos y clases de tipos en haskell
Descripción
Programacion funcional Mapa Mental sobre Tipos y clases de tipos en haskell, creado por tooon a el 03/10/2017.
Sin etiquetas
capitulo 8
http://learnyouahaskell.com
programacion funcional
Mapa Mental por
tooon a
, actualizado hace más de 1 año
Más
Menos
Creado por
tooon a
hace alrededor de 7 años
49
0
0
Resumen del Recurso
Tipos y clases de tipos en haskell
Podemos definir nuestros propios tipos de datos
se definen mediante la palabra reservada Data
Al lado izquierdo se define el tipo de dato y al lado derecho su constructor
por ejemplo
Crear un tipo de dato "Figura"
Podemos relacionar este tipo de dato con los "objetos" como en otros lenguajes de programación
que este conformado por un circulo o un rectangulo
Desde ahora un circulo o un rectangulo seran tratados como si fueran una figura
Al tener dos tipos de dato posibles la "figura"
puede tener funciones con parametros diferentes
como por ejemplo una funcion para hallar el area
tanto como para el circulo como para el rectangulo
Data Figura = Circulo Float Float Float | Rectangulo Float Float Float Float
Si deseamos representar este tipo de dato debemos declararlo
con deriving (show) en el contructor del tipo
Lo que nos asegura poder mostrar su representacion en pantalla
Consideremos el tipo de dato "Persona"
Con sus distintos atributos , como nombre ,color favorito, edad
Podemos declarar este tipo de dato , de forma lineal , especificando cada atributo de tipo primitivo y String
Es decir , Persona = Persona String String Int
Declarar de esta forma se presta para confuciones
ya que los atributos no son representativos
por ejemplo el segundo parametro podria ser color de ojos cafe
cuando en realidad era el color favorito cafe
o Podemos declarar la persona con una sintaxis de registro
En la que especificamos directamente cuales van a ser exactamente los atributos
y sus respectivos tipos de datos , ya sean primitivos o compuestos
por ejemplo
Data Persona = Persona { nombre :: String , colorFavorito:: String, edad:: Int}
Así evitamos confusiones en cuanto a los parametros
Otra forma de evitar estas confuciones es con los sinonimos de tipo
que no es mas que dar un sobrenombre a el parametro del tipo de dato
por ejemplo
type nombre = String
type colorFavorito =String
type Persona = { nombre , colorFavorito}
declarar una persona seria sencillo y muy explícito
por ejemplo
Persona {nombre= "Lina" , colorFavorito= "negro", edad = 20}
Podemos declarar nuestros tipos de datos , haciendo que sus parametros puedan ser de tipos diferentes
Como por ejemplo
Data carro a b = carro { compañia :: a, modelo:: b}
En este caso el parametro a , podria se un tipo de dato compuesto o primitivo
por ejemplo un entero , compañia = 1
por ejemplo a podria ser un tipo de dato compañia( compuesto), que tenga
nombre de la compañia y ubicacion
De esta forma obtenemos flexibilidad en nuestros tipos de datos
Esto es llamado Parámetros de tipo
Los tipos pueden derivar caracteristicas, comportamientos y condiciones
por medio de:
deriving( derivación ),
al final del contructor del tipo, Por ejemplo
Data Persona = Persona {nombre:: String, edad :: Int} deriving (Eq, Show , Read)
Como por ejemplo
Con "Eq"
se podrán comparar dos valores == o /=, Haskell comprobará si los constructores de tipo coinciden.
Con "Show"
Se permite ver el valor del tipo por consola representando el valor como un cadena
Con "read"
se permite convertir el tipo en una cadena
Ord
Es para tipos de valores que puedan ser ordenados
Este conjunto es llamado Clases de tipo
Si querermos definir nuestras propias clases de tipo para alguna estructura de dato
Debemos crear una instancia de ese tipo
por ejemplo
Data semaforo = Rojo | Amarillo | Verde
instance Eq semaforo where
Rojo == Rojo == true
Amarillo = Amarillo == true
Verde == verde == True
_ == _ == False
De esta manera tenemos nuestro propia clase de tipo y podriamos comparar dos luces
tenemos la opcion tambien de hacer tipos de clase si - no
que nos arrojaran un valor boleano
por ejemplo podemos definir una instancia si -no para valores enteros
si el numero es 0 arrojariamos falso y si es cualquier otro numero devolvemos verdadero
Instance YesNo Int where
yesno 0 = False
yesno _ = True
Probando esta instancia tendriamos algo asi
yesno 0
False
Por otra parte si queremos crear una instancia que aplique una función a una lista de un tipo
necesitariamos implementar un functor
esto tiene el mismo enfoque que la función map
por ejemplo
instance Functor [ ] where fmap = map
Probandola instancia
fmap ( 2* ) [1.. 3]
obtenemos
[ 2,4, 6]
podemos definir mas condiciones en la instancia si queremos
pero en escencia el functor aplica una funcion de un tipo , a una lista de otro tipo ( a )
y finalmente obtenemos una lista de un tipo diferente ( b )
Recordemos que haskell nos permite hacer recursión en distintos marcos
Uno de ellos es justamente cuando definimos estructuras o tipos de datos
por ejemplo
Data lista a = Empty | Cons a (Lista a ) deriving ( show)
Como podemos ver el tipo de dato lista puede contener listas o un valor vacio
Este tipo de llamada hace que haskell tenga un nivel de recursividad bastante alto
en este caso podemos declarar de forma infija una lista
como por ejemplo
20 'Cons' (5 ' Const ' Empty )
Y obtendriamos
20 : ( 5 : [ ] )
Cons en estee caso equivale a (dos puntos ) ' : '
Podemos generar facilmente una función para implementar arboles binario de busqueda
definiendo el arbol así
Data Arbol a = ArbolVacio | Nodo a ( Arbol a) (Arbol a )
Difiniendo una funcion para insertar en el arbol
que garantice que halla recursivdad a la hora de insertar los nodos ordenadamene
por ejemplo cuando un nodo es menor se deberia insertar por la izquierda de la raiz
Caso x < a = Nodo a ( Insertar x ArbolIzquierdo) ArbolDerecho
Mostrar resumen completo
Ocultar resumen completo
¿Quieres crear tus propios
Mapas Mentales
gratis
con GoConqr?
Más información
.
Similar
TERP10
macmanuel
Neurotransmisión, Aminoglucósidos e Inhibidores de la síntesis protéica - Farmacología 2015-V.
Christian Vega
Paridad del poder adquisitivo (PPA)
Gerardo Trejo
EL GERENTE COMO PLANIFICADOR Y ESTRATEGA Capítulo 8
FER NOVA
TYPE AND TYPECLASSES - HASKELL
FONTALVO ROMERO EDUARDO JOSÉ
Decreto Nº 66 - Capítulo Vlll
felipe vera
Inversiones y financiamiento
Rafael Garcia
Capítulo 8 La escapada
jocs.elaxai
Seguridad en los sistemas de información
Kassandra Carbaj
RECONOCIMIENTO DEL PROBLEMA Y BÚSQUEDA DE INFORMACIÓN
aymet milagros alcahuaman torres
ISO 9001 8.5: MEJORA
diego vargas
Explorar la Librería