Tipos de datos algebraicos

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

Tema 7. El sistema de clases

Programación Funcional Haskell Clase 21

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

Lección 1: Números reales

SISTEMA DE NUMEROS REALES

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

Programación Funcional en Haskell

INTERVALOS Y SEMIRRECTAS.

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

Tema 13: Aplicaciones de programación funcional

Guía 1: PATRONES DE REPETICIÓN

Tema: Clases y Objetos en C#. Parte II.

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

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

LA FORMA TRIGONOMETRICA DE LOS NUMEROS COMPLEJOS Y EL TEOREMA DE MOIVRE. Capítulo 7 Sec. 7.5 y 7.6

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

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

Representación Gráfica (recta numérica)

Calculando el volumen de un prisma recto triangular

Ficha de Aprendizaje N 13

En una recta numérica el punto que representa el cero recibe el nombre de origen.

EL LENGUAJE ALGEBRAICO

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

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

El lenguaje C. 1. Identificadores, constantes y variables

{ } Listado de elementos del conjunto

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

Explorando la ecuación de la recta pendiente intercepto

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

UNIDAD DE APRENDIZAJE II

CONCRECIÓN DE LOS CRITERIOS DE EVALUACIÓN Curso: PRIMERO de BACHILLERATO CIENCIAS Asignatura: MATEMÁTICAS I Profesor: ALFONSO BdV

UNA ECUACIÓN es una igualdad de dos expresiones algebraicas.

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

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

NÚMEROS ENTEROS. En la recta numérica se pueden representar los números naturales, el cero y los números negativos.

NOCIONES PRELIMINARES (*) 1

Álgebra y Trigonometría Clase 2 Ecuaciones, desigualdades y Funciones

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación.

TEMA 2: TEORÍA DE CONJUNTOS Y CONJUNTOS NUMÉRICOS.

INSTITUTO TECNOLOGICO DE LAS AMERICAS CARRERA DE TECNOLOGO EN DESARROLLO DE SOFTWARE PRECALCULO

Materia: Matemática de Tercer Año Tema: Pendiente

Operaciones con monomios y polinomios

Carlos A. Rivera-Morales. Precálculo 2

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

El curso está dividido en tres evaluaciones, de acuerdo con la programación general del Colegio, temporalizados así:

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

ESCUELA DE INFORMÁTICA

Descripciones de los niveles de logro modificados (ALD, siglas en inglés) de la prueba de evaluación MCA en matemáticas Grados 5 a 8

Algebra lineal y conjuntos convexos

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

Guía del estudiante. Actividad 1. Si la base de un triángulo es b y su altura es h: 1. Escriba la expresión algebraica que representa su área:

BLOQUE 1. LOS NÚMEROS

Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA

cómo expresarías?. ÁLGEBRA Álgebra Unidad 4. El lenguaje algebraico. TEMA 4: POLINOMIOS Grupo: 3º A Expresiones algebraicas Álgebra vs Aritmética

INTRODUCCIÓN. Para las siguientes dos actividades necesitaras: regla, lápiz, tijeras, calculadora.

Álgebra Lineal Ma1010

Clase 8 Matrices Álgebra Lineal

Notas del cursos. Basadas en los prontuarios de MATE 3001 y MATE 3023

MATEMÁTICAS BÁSICAS UNIVERSIDAD NACIONAL DE COLOMBIA - SEDE MEDELLÍN DESIGUALDADES

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

CONTENIDOS DIAGNÓSTICO DE ADMISIÓN 5º BÁSICO

José A. Jiménez Nieto

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

Ejercicios de Lógica Proposicional *

Ejercicios ejemplo: verificación de algoritmos del valor suma de una sucesión matemática. (CU00238A)

Principios de Computadoras II

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

GUÍA BÁSICA DE SCHEME v.4

Algunos ejemplos de conjuntos pueden ser los siguientes:

Semana02[1/23] Conjuntos. 9 de marzo de Conjuntos

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

Estrategias didácticas para la resolución de problemas en Matemática de I y II ciclos

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

GUÍAS DE ESTUDIO PROGRAMA DE ALFABETIZACIÓN, EDUCACIÓN BÁSICA Y MEDIA PARA JÓVENES Y ADULTOS

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

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

SESIÓN N 07 III UNIDAD RELACIONES Y FUNCIONES

DOCENTE: JESÚS E. BARRIOS P.

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

2. El conjunto de los números complejos

Unidad 2: Ecuaciones, inecuaciones y sistemas.

PROGRAMACIÓN DE LOS CONTENIDOS DE MATEMÁTICAS EN LA PREPARACIÓN DE LA PARTE COMÚN DE LA PRUEBA DE ACCESO A LOS C.F.G.S. (Opción C)

Guía para maestro. Expresiones algebraicas. Guía para el maestro. Compartir Saberes

CLASIFICACION DE LOS NUMEROS

Una ecuación puede tener ninguna, una o varias soluciones. Por ejemplo: 5x 9 = 1 es una ecuación con una incógnita con una solución, x = 2

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

Espacios Vectoriales

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

Primaria Sexto Grado Matemáticas (con QuickTables)

Elementos de un programa en C

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

Estándares de evaluación en la materia de MATEMÁTICAS de 1º de ESO. Curso 2016/2017.

1 - Ecuaciones. Sistemas de Ecuaciones Mixtos

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

TEMA 2. POLINOMIOS Y FRACCIONES ALGEBRAICAS

Introducción...5. Unidad 1 Comprensión de la multiplicación y la división...7. Unidad 2 Uso de la aritmética...31

Transcripción:

Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013

Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos del conjunto. Haskell incluye varios tipos de datos primitivos (como Bool, Int, Float, etc.). Vamos a ver en esta clase cómo definir nuestros propios tipos de datos, por medio de un mecanismo llamado tipos de datos algebraicos. Por qué nos interesa definir nuevos tipos de datos? 1 Representar estructuras más complejas. 2 Representar las entidades del dominio del problema a resolver. 3 Evitar confusiones de interpretación por parte del programador.

Tipos de datos algebraicos Para crear un tipo de datos algebraico decimos qué forma va a tener cada elemento. Se hace definiendo constantes que se llaman constructores. 1 Empiezan con mayúscula (como los nombres de los tipos de datos). 2 Pueden tener argumentos. 3 Ya están en forma normal. 4 Forman expresiones atómicas. Por ejemplo, el tipo algebraico Bool tiene dos constructores, sin argumentos: True:: False:: Bool Bool

Definición de tipos algebraicos Ejemplo: Una función que dada una fecha informa a qué estación del año pertenece. Esta signatura tiene un grave defecto Cuál? estacion :: Int -> Int -> Int Es mucho más expresivo, seguro y elegante definir un tipo de datos para las estaciones, con cuatro valores posibles. data Estacion = Verano Otono Invierno Primavera estacion :: Int -> Int -> Estacion estacion d m m < 3 = Verano estacion d m m == 3 && d < 21 = Verano...

Otro ejemplo data Figura = Circ Float Rect Float Float Tenemos dos constructores con parámetros. Algunas figuras son círculos y otras son rectángulos. 1 Los círculos se diferencian por un número (su radio). 2 Los rectángulos se especifican con dos números (su base y su altura). Ejemplos: 1 c1 = Circ 1 2 c2 = Circ (4.5-3.5) 3 circulo x = Circ (x+1) 4 r1 = Rect 2.5 3 5 cuadrado x = Rect x x

Pattern matching La correspondencia o coincidencia de patrones es el mecanismo por el cual podemos diferenciar entre elementos construidos con distintos constructores, en el caso de un tipo algebraico. Patterns: expresiones del lenguaje formadas solamente por constructores y variables que no se repiten. 1 Rect x y es un patrón 2 3 + x no es un patrón 3 Rect x x tampoco porque tiene una variable repetida Matching: operación asociada a un patrón. 1 Dada una expresión, dice si la forma de la expresión coincide con el patrón. 2 Si la correspondencia existe, entonces liga las variables del patrón a las subexpresiones correspondientes.

Pattern matching area :: Figura -> Float area (Circ radio) = pi * radio * radio area (Rect base altura) = base * altura circulo :: Float -> Figura circulo x = Circ (x+1) Evaluemos la expresión area (circulo 2) 1 El intérprete debe elegir cuál de las ecuaciones de area utilizar. 2 Primero debe evaluar circulo 2 para saber a qué constructor corresponde. 3 La reducción da Circ (2+1). 4 Ya se puede verificar cada ecuación de area para buscar el matching. 5 Se logra con la primera ecuación, y radio queda ligada a (2+1). 6 Luego de varias reducciones (aritméticas) adicionales, se llega al valor de la expresión: 28.2743.

Tipos de datos algebraicos recursivos Un tipo de datos algebraico se dice recursivo si el mismo tipo de datos es argumento de alguno de los constructores. Ejemplo: 1 data N = Z S N 2 Z es un constructor sin argumentos. 3 S es un constructor con argumentos (de tipo N). Elementos del tipo N: Z, S Z, S (S Z), S (S (S Z)),... 0 1 2 3 Este tipo de datos puede representar a los números naturales.

Recursión estructural Usando pattern matching, podemos definir funciones recursivas sobre cualquier término mediante recursión estructural. La recursión se hace sobre la estructura de los datos. Las invocaciones recursivas se hacen sobre expresiones de forma más simple. 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 = True menoroigual Z = False menoroigual (S n) (S m) = menoroigual n m

Otro ejemplo Veamos un tipo algebraico recursivo no paramétrico. data P = T F A P P O P P N P Tiene cinco constructores: 1 T y F son constructores sin argumentos. 2 A y O son constructores 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.

Funciones sobre fórmulas proposicionales Se busca definir una función que tome una fórmula proposicional y cuente la cantidad de constructores A que aparece: contaraes :: P -> Int contaraes T = 0 contaraes F = 0 contaraes (N x) = contaraes x contaraes (A x y) = 1 + (contaraes x) + (contaraes y) contaraes (O x y) = (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) valor (O x y) = (valor x) (valor y)

Listas Se trata de un tipo de datos algebraico recursivo paramétrico. data List a = Nil Cons a (List a) Interpretamos... 1 Nil como la lista vacía. 2 Cons x l como la lista que resulta de agregar x como primer elemento de la lista l. Por ejemplo, List Int es el tipo de las listas de enteros. 1 Nil es una lista con cero elementos. 2 Cons 2 Nil es una lista con un elemento, el 2. 3 Cons 3 (Cons 2 Nil) es una lista con primer elemento 3 y segundo elemento 2.

Notación de listas en Haskell List a se escribe [a] Nil se escribe [] (Cons x xs) se escribe (x:xs) Son equivalentes: 1 Cons 2 (Cons 3 (Cons 2 (Cons 0 Nil))) 2 (2 : (3 : (2 : (0 : [])))) 3 2 : 3 : 2 : 0 : [] 4 [2,3,2,0]

Funciones sobre listas Longitud de una lista: long :: [a] -> Int long [] = 0 long (x:xs) = 1 + (long xs) Suma de los elementos de una lista de enteros: sumlist :: [Int] -> Int sumlist [] = 0 sumlist (x:xs) = x + (sumlist xs) Concatenar dos listas: concat :: [a] -> [a] -> [a] concat [] ys = ys concat (x:xs) ys = x: (concat (xs ys))

Ejercicios 1 Escribir una función que implemente la resta entre dos números del tipo N. Definirlo como data N = Z S N deriving Show (permite mostrar en pantalla los valores del tipo). 2 Escribir una función que cuente la cantidad de constantes (True y False) de una fórmula proposicional. 3 Escribir una función que cuente la cantidad de valores positivos de una lista de enteros. 4 Escribir una función que reciba una lista l y un valor x, y determine si el valor x está en la lista l. 5 Escribir una función que reciba una lista y retorne otra lista igual a la recibida, pero sin el segundo elemento. 6 Escribir una función que reciba una lista y retorne otra lista igual a la recibida, pero sin los elementos negativos. 7 Escribir una función que determine si una lista es paĺındroma (capicúa).