Tipos de datos y clases de tipos

Documentos relacionados
Tema 3: Tipos y clases

Tema 3: Tipos y clases

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Tema 7. El sistema de clases

Introducción a los Algoritmos Validez, Satisfactibilidad, Tipos y Funciones

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tema 3. Tipos de datos simples

Lógica y Programación

Programación Funcional Haskell Clase 21

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Tema 3.- Predicados y sentencias condicionales

GUÍA BÁSICA DE SCHEME v.4

El lenguaje C. 1. Identificadores, constantes y variables

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Programación en java. Estructuras algorítmicas

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

CONTROLADORES DE FLUJO DE PROGRAMA

Tema 13: Aplicaciones de programación funcional

Tipos de Datos de python (1ª parte):

Exponentes, Raíces y Radicales. Números Reales

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

OPERADORES Y EXPRESIONES

ƒ : {(1, 4), (2, 5), (3, 6), (4, 7)}.

Manual de turbo pascal

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Tema 2. El lenguaje JAVA

Principios de Computadoras II

Sintaxis básica, variables y 7pos

Ficha de Aprendizaje N 13

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Colegio Universitario Boston

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Programación Funcional

TI 89. Cómo sobrevivir en Precálculo

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Datos y tipos de datos

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

TIPO DE DATO ABSTRACTO (TDA)

Programación. Test Autoevaluación Tema 3

Variables. Profesor Leonardo Carámbula - Programación III EMT I.S.B.O.

Estructuras de Datos. Dr. Pablo E. Fidel Martínez López Lic. en Ciencias de la Computación UNR

Teoría de Conjuntos y Conjuntos Numéricos

1 ELEMENTOS BASICOS DEL LENGUAJE

Tema: Tipos de datos y conversiones

SOLUCIONARIO Composición de funciones y función inversa

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

PHP: Lenguaje de programación

ARITMÉTICA MODULAR. Unidad 1

33. SISTEMA PLANOS ACOTADOS

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

4. Operadores Operador asignación

1 Estructura básica de un programa C++

Isabelle como un lenguaje funcional

Programación Funcional en Haskell

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Teoría de Conjuntos y Conjuntos Numéricos

Hoja de ejercicios del Tema 3

La desviación típica y otras medidas de dispersión

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Ejercicio 3 Funciones Parte 1.

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Elementos de un programa en C

GIMNASIO VIRTUAL SAN FRANCISCO JAVIER Valores y Tecnología para la Formación Integral del Ser Humano UNIDAD I FUNCIONES

Polinomios y Estadística

Espacios Vectoriales

Definición de Memoria

FUNDAMENTOS DE INFORMÁTICA

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Computación II. Introducción a Visual Basic

Tema 4. Operadores y Expresiones

Lección 2 Introducción al lenguaje C

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Coordinación de Matemática I (MAT021) 1 er Semestre de 2013 Semana 7: Lunes 22 - Viernes 27 de Abril. Contenidos

El lenguaje Haskell 98

U i n d id d a 3. El Element os á bá i s cos de un programa

{ } Listado de elementos del conjunto

GUÍAS DE ESTUDIO. Programa de alfabetización, educación básica y media para jóvenes y adultos

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

TEMA 1. Las cuentas de andar por casa

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Fundamentos de la programación

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Introducción a C++ y Code::Blocks

Modulo I: Introducción Gestores de Bases De Datos

MANUAL BÁSICO DE MYSQL

FUNDAMENTOS DE INFORMÁTICA

No es otra cosa, que la representación de los resultados de una función sobre el plano carteciano.

TEORÍA DE CONJUNTOS.

Transcripción:

Tipos de datos y clases de tipos Taller de Álgebra I Verano 2017

Tipos de datos Tipo de dato Un conjunto de valores a los que se les puede aplicar un conjunto de funciones. Ejemplos 1 Integer = (Z, {+,,, div, mod}) es el tipo de datos que representa a los enteros con las operaciones aritméticas habituales. 2 Float = (Q, {+,,, /}) es el tipo de datos que representa a los racionales, con la aritmética de punto flotante. 3 Bool = ({True, False}, {&&,, not}) representa a los valores lógicos. Dado un valor de un tipo de datos, solamente se pueden aplicar a ese valor las operaciones definidas para ese tipo de datos.

Tipos de datos En Haskell los tipos se notan con ::. Por ejemplo, en GHCI podemos ver el tipo del siguiente valor: Prelude > : t True True :: Bool A las expresiones también les corresponde un tipo de dato. Prelude > : t (4^10000000 + 2) < 1 (4^10000000 + 2) < 1 :: Bool Dada una expresión, se puede determinar su tipo sin saber su valor.

Tipos de datos Qué tipo tiene la expresión? f True Depende de f. Por ejemplo: f :: Bool -> Bool f x = not x f :: Bool -> Float f x = pi funcion3 :: Integer -> Integer -> Bool -> Bool funcion3 x y b = b ( x > y) Aplicación de funciones Prelude >: t funcion3 10 20 True funcion3 10 20 True :: Bool

Tipos de datos Ejercicios Determinar el tipo de las siguientes funciones doble ::?? doble x = x + x cuadruple ::?? cuadruple x = doble ( doble x) Ejercicios Determinar el tipo de las siguientes expresiones doble 10 dist (dist pi 0 pi 1) (doble 0) (doble 2) (3/4) doble True

Ejercicios Ejercicios Tipar e implementar las siguientes funciones espar: dado un valor determina si es par o no. Usar mod x y. espositiva: dado un valor determina si es positivo

Signatura Es importante observar la signatura de las funciones en las definiciones anteriores. Especificamos expĺıcitamente el tipo de datos del dominio y el codominio de las funciones que definimos. 1 No es estrictamente necesario especificarlo, dado que el mecanismo de inferencia de tipos de Haskell puede deducir la signatura más general para cada función. 2 Sin embargo, es buena idea dar expĺıcitamente la signatura de las funciones ( por qué?).

Variables de tipo A veces las funciones que queremos escribir pueden funcionar sobre muchos tipos de datos. Por ejemplo: identidad :: a -> a identidad x = x Notar que a va en minúscula y denota una variable de tipo. En Haskell esa función ya existe y se llama id : :t id id :: a -> a Esta función vale para cualquier tipo de datos. Qué pasa con? id (1>3) id (sqrt 2) :t id (1>3) :t id (sqrt 2)

Clases de tipos La función (+) admite cualquier tipo de datos? Qué pasa con? 2 + 4 True + False :t (+) (+) :: Num a => a -> a -> a Qué significa Num a =>...? Lo que aparece antes del símbolo => es la condición que debe cumplir la variable de tipo a. La función (+) solo se admiten tipo de datos numéricos. Cuál es la signatura de...? :t (>=) :t (==) :t ( >=) ( >=) :: Ord a => a -> a -> a :t (==) (==) :: Eq a => a -> a -> a

Clases de tipos Clase de tipo Un conjunto de tipos de datos a los que se les puede aplicar un conjunto de funciones. Algunas clases: 1 Num := ({ Int, Integer, Float, Double,..., }, { (+), (*), abs,...}) 2 Integral := ({ Int, Integer,..., }, { mod, div,...}) 3 Fractional := ({ Float, Double,..., }, { (/),...}) 4 Floating := ({ Float, Double,..., }, { sqrt, sin, cos, tan,...}) 5 Ord := {Bool, Int, Integer, Float, Double,... }, { (<=), compare} 6 Eq := ({ Bool, Int, Integer, Float, Double,... }, { (==), (/=)}

Tipos de datos: Tuplas Dados dos tipos de datos A y B, tenemos el tipo de datos (A,B) que representa pares ordenados de elementos, donde el primero es de tipo A y el segundo es de tipo B. Algunas operaciones: fst y snd fst (1 + 4,2) 5 snd (1,(2,3)) (2,3) Ahora podemos definir la norma vectorial un poco más claramente: normavectorial :: ( Float, Float ) -> Float normavectorial p = sqrt (( fst p) ^ 2 + ( snd p) ^ 2) Nota: Hay tuplas de distintos tamaños: (True,1,4.0), (0,0,0,0).

Tipos de datos Ejercicios Implementar las siguientes funciones crearpar :: a -> b -> (a,b) invertir :: (a,b) -> (b,a) distancia :: (Float,Float) -> (Float,Float) -> Float Completar la implementación de la función raices :: Float -> Float -> Float -> (Float, Float) para que esta vez devuelva las dos raíces de la función cuadrática.

Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas). [div 1 1, div 2 1] :: Integral t => [t]. (Vale [Integer]. NO vale [Float]). [1, 2] :: Num t => [t]. (Vale [Float], [Integer]). [1.0, 2] :: Fractional t => [t]. (Vale [Float]. NO vale [Integer]). [[1], [2,3], [], [1,1000,2,0]] :: Num t => [[t]] [1, True] NO ES UNA LISTA VÁLIDA, por qué? [1.0, div 1 1] NO ES UNA LISTA VÁLIDA, por qué? Ejercicio Tipar las siguientes expresiones [(1,2), (3,4), (5,2)] [maximo 2 3, fst (2+2, 3+4), 3+4-3/4] [ [], [], [], [], [] ] []

Operaciones Algunas operaciones head :: [a] -> a tail :: [a] -> [a] (:) :: a -> [a] -> [a] (++) :: [a] -> [a] -> [a] length :: [a] -> Int reverse :: [a] -> [a] Tipar y evaluar las siguientes expresiones head [(1,2), (3,4), (5,2)] tail [1,2,3,4,4,3,2,1] head [] head [1,2,3] : [2,3] [True, True] ++ [False, False] [1,2] : []

Listas Formas rápidas para crear listas Prueben las siguientes expresiones en GHCI [1..100] [1,3..100] [100..1] Ejercicios Definir la función listar :: a -> a -> a -> [a] que toma 3 elementos y los convierte en una lista. Escribir una expresión que denote la lista estrictamente decreciente que comienza con el número 1 y termina con el número -100.

Tipos Char y String Char Es un tipo de datos cuyos valores representan los caracteres: letras, números, símbolos especiales. Por ejemplo: 'a', 'b', '1', '$', '@', ' ', etc. String Es una lista de Char, es decir String = [Char]. Ejemplo: "hola" = ['h', 'o', 'l', 'a'].

Tipos Char y String II Algunas operaciones isnumber: devuelve verdadero si el caracter representa un número. islower: devuelve verdadero si el caracter es minúscula. toupper: dado un caracter, devuelve el mismo en mayúscula. ord: dado un caracter, devuelve el valor de la enumeración correspondiente a ese caracter. Ej: ord a 97 chr: dado un valor devuelve el caracter que representa en la enumeración. Ej: chr 97 a Estas funciones están en un module que lo pueden cargar así: Prelude > import Data. Char Prelude Data. Char >

Ejercicio El promedio El criterio de aprobación de una materia que tiene 2 parciales y un tp es el siguiente: Si el promedio de las 3 notas es 7 o más el resultado es: Promocionado Si el promedio es 4 o más y no llega a 7, el resultado es: A final Si el promedio es menor a 4 el resultado es: No aprobado Definir la función resultadocurso :: Integer -> Integer -> Integer -> String que cumple con lo especificado. Ej: Prelude > resultadocurso 6 7 8 " Promocionado "

Where!? Evitando repetir código Podemos escribir una expresión y usarla múltiples veces pero definirla sólo una vez. Por ejemplo, usando promedio: resultadocurso :: Float -> Float -> Float -> String resultadocurso p1 p2 tp promedio >= nota_prom = " Promocionado " promedio >= nota_final = " A final " otherwise = " No aprobado " where promedio = (( p1+p2+tp)/3) nota_prom = 7 nota_final = 4

Ejercicios 1 Implementar la función pendiente :: ( Float, Float ) -> ( Float, Float ) -> Float que toma dos puntos y calcula la pendiente de la recta que pasa por esos puntos. 2 Implementar la función iniciales :: String -> String -> String que dado el nombre y apellido de una persona, devuelve sus iniciales con puntos. Por ejemplo: iniciales "Harry" "Potter" "H.P."

Extras de GHCI Para tener colores así: Prelude > doble 10 20 Investigar otras opciones: :set prompt "\ESC[32m\STX%s\ESC[m\STX> " :set +t :unset +t