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

Documentos relacionados
Algoritmos y programas. Algoritmos y Estructuras de Datos I

Tema 7. El sistema de clases

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Programación Funcional en Haskell

EL LENGUAJE ALGEBRAICO

El lenguaje C. 1. Identificadores, constantes y variables

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:

Guía 1: PATRONES DE REPETICIÓN

Principios de Computadoras II

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

CENTRO UNIVERSITARIO MONTEJO A.C. SECUNDARIA Temario Matemáticas 1

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

Diagramas de secuencia

Formato para prácticas de laboratorio

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

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

Profesorado de Informática Ciencias de la Computación INET- DFPD Matemática I - Matemática Discreta usando el computador Ing. Prof.

Programación en java. Estructuras algorítmicas

EVERYDAY ENGINEERING EXAMPLES FOR SIMPLE CONCEPTS

Series aritméticas. ó La suma de los primeros n términos en una serie se representa por S n. . Por ejemplo: S 6

Estatutos de Control C# Estatutos de Decisión (Selección)

Matemáticas 2º E.S.P.A. Pág.1 C.E.P.A. Plus Ultra. Logroño

Precálculo 1 - Ejercicios de Práctica. 1. La pendiente de la línea (o recta) que pasa por los puntos P(2, -1) y Q(0, 3) es:

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

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

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Ficha de Aprendizaje N 13

Guía práctica de estudio 05: Diagramas de flujo

Calculando el volumen de un prisma recto triangular

GUÍA BÁSICA DE SCHEME v.4

Sesión del día 11 de Marzo del 2011 y tutoría del día 12 de Marzo del 2011

Elementos de un programa en C

Forma binomial de números complejos (ejercicios)

Práctica de constantes, expresiones y operadores. Programación en C 1

ESCUELA DE INFORMÁTICA

PAU Madrid. Matemáticas II. Año Examen modelo. Opción A. Ejercicio 1. Valor: 2 puntos.

1.3.- V A L O R A B S O L U T O

Repaso de Vectores. Autor: Dra. Estela González. flecha. La longitud de la línea indica la magnitud del vector, y su

Matemáticas Básicas para Computación

13. Utilizar la fórmula del término general y de la suma de n términos consecutivos

SISTEMA DE NUMEROS REALES

Teorema Central del Límite (1)

Tipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S

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)

Tema 3.- Predicados y sentencias condicionales

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

MATEMÁTICAS 3º ESO PENDIENTES HOJA 1 GEOMETRÍA PLANA. 1.- Calcular el área y el perímetro de los siguientes polígonos:

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Operaciones con monomios y polinomios

Conectados con el pasado, proyectados hacia el futuro Plan Anual de Matemática II Año PAI VII Grado

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

Tipos Abstractos de Datos

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

Los números racionales: Q

Ángulos complementarios Un par de ángulos son complementarios si la suma resultante de sus medidas es.

4. Operadores Operador asignación

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

Trabajar los cuadriláteros con Dash

Las plantillas permiten definir funciones genéricas.

Proyecto. Tema 6 sesión 2: Generación de Rectas, Circunferencias y Curvas. Geometría Analítica. Isidro Huesca Zavaleta

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

Tablas Hash y árboles binarios

Primaria Sexto Grado Matemáticas (con QuickTables)

Definición de Memoria

Colegio Decroly Americano Matemática 7th Core, Contenidos I Período

GRAMATICAS LIBRES DEL CONTEXTO

Definición de la integral de Riemann (Esto forma parte del Tema 1)

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

Programación Declarativa UNIVERSIDAD DE MÁLAGA

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

PRECALCULO INSTITUTO TECNOLÒGICO DE LAS AMÈRICAS CARRERA DE TECNÓLOGO EN MECATRONICA. Precálculo. Nombre de la asignatura: MAT-001

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

2. Recolección de información - Medidas de posición: moda, media aritmética, mínimo, máximo - Frecuencia absoluta, relativa y porcentual

Guía 2: Funciones, listas, recursión e inducción

Tema: Excel Formulas, Funciones y Macros

Bases Matemáticas para la Educación Primaria. Guía de Estudio. Tema 3: Números racionales. Parte I: Fracciones y razones Números racionales

Expresiones y sentencias

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Diagnóstico de fallas en circuitos digitales

Tema: Entorno a C# y Estructuras Secuenciales.

Una sucesión infinita es una función cuyo dominio es el conjunto de los enteros positivos. Podemos denotar una sucesión como una lista

Cuando se enumeran todos los elementos que componen el conjunto. A = { 1, 2, 3, 4, 5 }

Operadores y Expresiones

Análisis y Manejo de datos en Excel 2013 con tablas, funciones y tablas dinámicas

GUION TÉCNICO AUDIO. El Conjunto De Los Números Reales. realidad, es una ciencia resultado de más de 4 mil años de

1. Progresiones aritméticas

7.4. UTILIDADES DE LAS PILAS

Ing. Ramón Morales Higuera

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

DESCRIPCIÓN Y CLASIFICACIÓN DE POLÍGONOS

2. Cuál es el valor del cociente de la suma entre la diferencia de los senos de dos ángulos?

M465: Tanque de Agua. A) Presentación del problema

Índice Proposiciones y Conectores Lógicos Tablas de Verdad Lógica de Predicados Inducción

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

POLÍGONOS

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

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

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

Computación II. Introducción a Visual Basic

Transcripción:

Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos Int Float Char Bool otros tipos de datos: tipos algebraico tipos abstracto tipo algebraico conocemos la forma que tiene cada elemento tenemos un mecanismo para inspeccionar cómo está construido cada dato tipo abstracto solo conocemos sus operaciones no sabemos cómo están formados los elementos la única manera de obtener información sobre ellos es mediante las operaciones 1 Tipos algebraicos para crear un tipo algebraico decimos qué forma va a tener cada elemento se hace definiendo constantes que se llaman constructores empiezan con mayúscula (como los tipos) pueden tener argumentos, pero no hay que confundirlos con funciones no tienen reglas de inferencia asociada forman expresiones atómicas (valores) ejemplo muy sencillo de tipo algebraico: Bool tiene dos constructores (sin argumentos) True :: Bool False :: Bool 3 Definición de tipos algebraicos cláusulas de definición de tipos algebraicos empiezan con la palabra data definen el tipo y sus constructores cada constructor da una alternativa distinta para construir un elemento del tipo los constructores se separan entre sí por barras verticales data Sensación = Frío Calor tiene dos constructores sin parámetros el tipo tiene únicamente dos elementos, como el tipo Bool data Figura = Círc Float Rect Float Float dos constructores con parámetros algunas figuras son círculos y otras rectángulos los círculos se diferencian por un número (su radio) los rectángulos, por dos (su base y su altura) ejemplos: c1 = Círc 1 c = Círc (4.5-3.5) círculo x = Círc (x+1) r1 = Rect.5 3 cuadrado x = Rect x x 4

Pattern matching correspondencia o coincidencia de patrones mecanismo para ver cómo está construido un elemento de un tipo algebraico si definimos una función que recibe como parámetro una Figura, podemos averiguar si es un círculo o un rectángulo (y con qué parámetros fue construida) patterns: expresiones del lenguaje formadas solamente por constructores y variables que no se repiten Rect x y es un patrón 3 + x no es un patrón Rect x x tampoco porque tiene una variable repetida matching: operación asociada a un patrón dada una expresión cualquiera dice si su valor coincide por su forma con el patrón si la correspondencia existe, entonces liga las variables del patrón a las subexpresiones correspondientes 5 Ejemplo área :: Figura -> Float área (Círc radio) = pi * radio * radio área (Rect base altura) = base * altura círculo :: Float -> Figura círculo x = Círc (x+1) lado izquierdo: función que estamos definiendo aplicada a un patrón evaluemos la expresión área (círculo ) el intérprete debe elegir cuál de las ecuaciones de área utilizar primero debe evaluar círculo para saber a qué constructor corresponde la reducción da Círc (+1) ya se puede verificar cada ecuación de área para buscar el matching se logra con la primera ecuación radio queda ligada a (+1) luego de varias reducciones (aritméticas) más, se llega al valor de la expresión: 8.743 6 Sinónimos de tipos Tipos recursivos se usa la cláusula type para darle un nombre nuevo a un tipo existente no se crea un nuevo tipo, sino un sinónimo de tipo los dos nombres son equivalentes ejemplo: nombrar una instancia particular de un tipo paramétrico: type String = [Char] ejemplo: renombrar un tipo existente con un nombre más significativo: type Nombre = String type Sueldo = Int type Empleado = (Nombre, Sueldo) type Dirección = String type Persona = (Nombre, Dirección) Persona es un par de String, pero (String, String), es más difícil de entender también hay sinónimos de tipos paramétricos: type IntY a = (Int, a) El tipo definido es argumento de alguno de los constructores Ejemplo: data N = Z S N tiene dos constructores: 1. Z es un constructor sin argumentos. S es un constructor con argumentos (de tipo N) elementos del tipo N: Z, S Z, S (S Z), S (S (S Z)),... 3 Este tipo puede representar a los números naturales. 7 8

Ejemplos Usando pattern matching, podemos definir funciones recursivas sobre cualquier término mediante recursión estructural. suma :: N -> N -> N suma n Z = n suma n (S m) = S (suma n m) producto :: N -> N -> N producto n Z = Z producto n (S m) = suma n (producto n m) menoroigual :: N -> N -> Bool menoroigual Z m = True menoroigual (S n) Z = False menoroigual (S n) (S m) = menoroigual n m Otro ejemplo data P = T F A P P N P tiene cuatro constructores: 1. T y F son constructores sin argumentos. A es un constructor con dos argumentos (de tipo P) 3. N es un constructor con un argumento (de tipo P) elementos del tipo P: T, F, A T F, N (A T F),... true false (true false) (true false) Este tipo puede representar a las fórmulas proposicionales con un conectivo unario y otro binario. 9 10 Ejemplos contaraes :: P -> Int contaraes T = 0 contaraes F = 0 contaraes (N x) = contaraes x contaraes (A x y) = 1 + (contaraes x) + (contaraes y) valor :: P -> Bool valor T = True valor F = False valor (N x) = not (valor x) valor (A x y) = (valor x) && (valor y) 11 Listas se usan mucho (el igual que en el lenguaje de especificación) son un tipo algebraico recursivo paramétrico en especificación las vimos definidas con observadores en Haskell, se definen con constructores primero, vamos a definirlas como un tipo algebraico común data List a = Nil Cons a (List a) interpretamos Nil como la lista vacía Cons x l como la lista que resulta de agregar x como primer elemento de l por ejemplo, List Int es el tipo de las listas de enteros. Son de este tipo: Nil Cons Nil Cons 3 (Cons Nil) List (List Int) es el tipo de las listas de listas de enteros. Son de este tipo: Nil y representa [ ] Cons Nil Nil y representa [[ ]] Cons (Cons Nil) (Cons Nil Nil) y representa [[],[ ]] 1

Ejemplos calcular la longitud de una lista longitud :: List a -> Int longitud Nil = 0 longitud (Cons x xs) = 1 + (longitud xs) sumar los elementos de una lista de enteros sumar :: List Int -> Int sumar Nil = 0 sumar (Cons x xs) = x + (sumar xs) concatenar dos listas concat :: List a -> List a -> List a concat Nil ys = ys concat (Cons x xs) ys = Cons x (concat xs ys) 13 Notación de listas en Haskell List a se escribe [a] Nil se escribe [] (Cons x xs) se escribe (x:xs) los constructores son : y [] Cons (Cons 3 (Cons (Cons 0 Nil))) ( : (3 : ( : (0 : [])))) : 3 : : 0 : [] notación más cómoda: [,3,,0] Ejemplos (todas están en el preludio) length :: [a] -> Int length [] = 0 length (x:xs) = 1 + (length xs) sum :: [Int] -> Int sum [] = 0 sum (x:xs) = x + (sum xs) (++) :: [a] -> [a] -> [a] [] ++ ys = ys (x:xs) ++ ys = x:(xs ++ ys) ++ concatena dos listas. Es un operador que se usa con notación infija [1, ] + +[3, 4, 5] 14 Árboles estructuras formadas por nodos almacenan valores de manera jerárquica (cada nodo guarda un valor) vamos a trabajar con árboles binarios de cada nodo salen cero o dos ramas hoja: es un nodo que no tiene ramas Ejemplos: 4 7 9 5 15 Definición del tipo Árbol Definición del tipo data Árbol a = Hoja a Nodo a (Árbol a) (Árbol a) Hoja Nodo (Hoja 4) (Hoja 5) Nodo (Hoja 4) (Nodo 5 (Hoja 0) (Hoja 1)) hojas :: Árbol a -> Int hojas (Hoja x) = 1 hojas (Nodo x i d) = (hojas i) + (hojas d) altura :: Árbol a -> Int altura (Hoja x) = 1 altura (Nodo x i d) = 1 + ((altura i) max (altura d)) 16

Recorridos en árboles las funciones que vimos van recorriendo un árbol y operando con cada nodo podrían hacerlo en cualquier orden con el mismo resultado a veces es importante el orden al recorrer un árbol para aplicarle alguna operación inorder, preorder :: Árbol a -> [a] inorder (Hoja x) = [x] inorder (Nodo x i d) = (inorder i) ++ [x] ++ (inorder d) preorder (Hoja x) = [x] preorder (Nodo x i d) = x : ((preorder i) ++ (preorder d)) Por ejemplo, para el árbol A inorder A es [4,,0,5,1] preorder A es [,4,5,0,1] 17