Tema 11. Listas infinitas



Documentos relacionados
Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Programación Funcional

CI 2125, Computación I

Euclides extendido y Test de primalidad probabiĺıstico

SOLUCIONES A EJERCICIOS

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

PRÁCTICA N 2 SISTEMAS DE NUMERACIÓN

Generación de números aleatorios

Nota 2. Luis Sierra. Marzo del 2010

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

Secuencias. Mauro Jaskelioff 18/05/2015

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

Diseño Estructurado de Algoritmos

Estructuras Repetitivas: SENTENCIA WHILE EN MATLAB INFORMÁTICA T2 INGENIERÍA INDUSTRIAL JORNADA ESPECIAL

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

Tema 5. Aproximación funcional local: Polinomio de Taylor. 5.1 Polinomio de Taylor

Algoritmos y Diagramas de Flujo 2

RELACIONES DE RECURRENCIA

Generación de funciones lógicas mediante decodificadores binarios con salidas activas a nivel alto

Tema 2: Introducción a la programación con Haskell

Modelos y Bases de Datos

Programación Funcional en Haskell

Estructuras de Control - Diagrama de Flujo

Oprime click para iniciar

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Matrices equivalentes. El método de Gauss

Problemas indecidibles

Introducción a Haskell. Cecilia Manzino

TEOREMA DE DETERMINACIÓN DE APLICACIONES LINEALES

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

Tema 2. Espacios Vectoriales Introducción

Programa para el Mejoramiento de la Enseñanza de la Matemática en ANEP Proyecto: Análisis, Reflexión y Producción. Fracciones

Programa de Acceso Inclusivo, Equidad y Permanencia PAIEP. Universidad de Santiago de Chile. Funciones I

Ejemplos de conversión de reales a enteros

INTERPOLACIÓN POLINÓMICA Y LA DIVISIÓN DE SECRETOS

Álgebra Relacional. Unidad 5

Tema 6: Funciones recursivas

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Clases de apoyo de matemáticas Fracciones y decimales Escuela 765 Lago Puelo Provincia de Chubut

TRANSFORMADORES EN PARALELO

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Inducción y recursión

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

LÍMITES DE FUNCIONES. CONTINUIDAD

Tema : ELECTRÓNICA DIGITAL

Lenguajes y Compiladores

Nano Taller de Python

Divisibilidad y números primos

Por ello, también será importante la estructura del juego constituyente para efectuar una predicción del resultado.

1 Espacios y subespacios vectoriales.

Listas de vectores y conjuntos de vectores

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

Ejercicios de Programación Orientada a Objetos

La suma se realiza miembro a miembro. La suma de polinomios goza de las mismas propiedades que la suma de números. Ejemplo:

Business Process Management(BPM)

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Herramientas computacionales para la matemática MATLAB: Arreglos

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

UNIDAD Nº 1: 1. SISTEMAS DE NUMERACION. Formalizado este concepto, se dirá que un número X viene representado por una cadena de dígitos:

Tipos primitivos y clases de interés

1. (2 puntos) En la V Caminata Madrileño Manchega, los participantes caminan de Madrid

SIMULACION. Formulación de modelos: solución obtenida de manera analítica

11. Algunas clases estándar de Java (II)

Tablas. Estas serán las tablas que usaremos en la mayoría de ejemplos. Empleado

>> % suma de dos números reales, el resultado se asigna a ans

Fórmulas y funciones

Tema 4: Estructuras de Control Estructura y Contenidos

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Manos a la obra: Recursión, división y listas

Introducción a la Computación TFA

Sistemas de Numeración

Semana Empecemos! Qué sabes de...? El reto es... Vamos al grano. Excel. Parte II

Un problema sobre repetidas apuestas al azar

UTILIZACION DE ESQUEMAS XML DE LA AGENCIA TRIBUTARIA PARA CALCULO RETENCIONES

Descomposición factorial de polinomios

Definición Dados dos números naturales m y n, una matriz de orden o dimensión m n es una tabla numérica rectangular con m filas y n columnas.

COMO CREAR UN DIAGRAMA DE FLUJO

QUÉ ES UN NÚMERO DECIMAL?

LABORATORIO Nº 3 PRÁCTICA DE FUNCIONES EN MICROSOFT EXCEL

TEMA 5. ELECTRÓNICA DIGITAL

Módulo 9 Sistema matemático y operaciones binarias

Ingeniería en Informática

EDWIN KÄMMERER ORCASITA INGENIERO ELECTRÓNICO

1. DML. Las subconsultas

Ejercicio 3: -Realiza las siguientes operaciones, y después, calcula el dominio resultante. Grupo F7

JOSE VICENTE CONTRERAS JULIO CALCULO INTEGRAL LA ANTIDERIVADA

Tema 2 Límites de Funciones

Una breve introducción a Excel c

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

AXIOMAS DE CUERPO (CAMPO) DE LOS NÚMEROS REALES

4. Modelo Relacional: Manipulación de los datos.

POSICIONAMIENTO EN LA WEB (SEM Y SEO) Sesión 2: Long Tail

Programación con listas. El tipo lista

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Ecuaciones Diferenciales Tema 2. Trasformada de Laplace

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Escenas de episodios anteriores

Transcripción:

Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 11. Listas infinitas 11.1 Listas infinitas 11.2 La criba de Eratóstenes 11.3 Redes de procesos Los números de Fibonacci Los factoriales

11.1 Listas infinitas La evaluación perezosa permite trabajar con listas infinitas Algunas funciones predefinidas construyen listas infinitas: repeat v ===> [ v, v, v,... ] repeat :: a [a] repeat x = xs where xs = x : xs cycle [ v 1, v 2,..., v n ] ===> [ v 1, v 2,..., v n, v 1, v 2,..., v n,... ] cycle :: [a] [a] cycle [ ] = error Prelude.cycle : empty list cycle xs = xs where xs = xs ++ xs iterate f x ===> [ x, f x, f (f x), f (f (f x)),... ] iterate :: (a a) a [a] iterate f x = x : iterate f (f x ) Se pueden definir listas infinitas utilizando estas funciones: losnaturales :: Num a [a] losnaturales = iterate (+1) 0 múltiplosde :: Num a a [a] múltiplosde x = iterate (+x ) 0 potenciasde :: Num a a [a] potenciasde x = iterate ( x ) 1 Informática Pepe Gallardo Universidad de Málaga 11.1

Argumentos infinitos y resultados finitos La evaluación perezosa permite obtener resultados finitos aunque los argumentos sean infinitos:? take 10 (múltiplosde 3) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] :: La evaluación es: take :: Int [a] [a] take 0 = [ ] take [ ] = [ ] take (n + 1) (x : xs) = x : take n xs iterate f x = x : iterate f (f x ) múltiplosde x = iterate (+x ) 0 take 2 (múltiplosde 3) ===> {por múltiplosde ya que take no puede evaluarse} take 2 (iterate (+3) 0) ===> {por iterate} take 2 (0 : iterate (+3) (0 + 3)) ===> {por take} 0 : take 1 (iterate (+3) (0 + 3)) ===> {por iterate ya que take no puede evaluarse} 0 : take 1 ((0 + 3) : iterate (+3) ((0 + 3) + 3)) ===> {por take} 0 : (0 + 3) : take 0 (iterate (+3) ((0 + 3) + 3)) ===> {por (+)} 0 : 3 : take 0 (iterate (+3) ((0 + 3) + 3)) ===> {por take} 0 : 3 : [ ] ===> {sintaxis de listas} [0, 3] Solo se evalúa la parte de la lista necesaria para el obtener el resultado. Informática Pepe Gallardo Universidad de Málaga 11.2

11.2 La criba de Eratóstenes Eratóstenes propuso el un método para calcular todos los números primos Partir de la lista l 0 = [2.. ] [ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,...] El primer elemento ( 2 ) es primo. Calcular l 1 eliminando de l 0 los múltiplos de 2: l 1 ===> {eliminando múltiplos de 2 en l 0 } [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,...] ===> [ 3, 5, 7, 9, 11, 13, 15, 17, 19, 21,...] El primer elemento ( 3 ) es primo. Calcular l 2 eliminando de l 1 los múltiplos de 3: l 2 ===> {eliminando múltiplos de 3 en l 1 } [ 5, 7, 9, 11, 13, 15, 17, 19, 21,...] ===> [ 5, 7, 11, 13, 17, 19,...] Repetir indefinidamente el proceso. Los elementos que aparecen al inicio de las listas [l 0, l 1, l 2,... ] son los números primos: [2,3,5,... ] Informática Pepe Gallardo Universidad de Málaga 11.3

La criba de Eratóstenes (2) Elimina de una lista el primer elemento y todos sus múltiplos: cribar :: cribar [ ] = [ ] cribar (x : xs) = [ y y xs, y noesm últiplode x ] where a noesm últiplode b = (mod a b /= 0) Por ejemplo:? cribar [2.. 10] [3, 5, 7, 9] :: Observación: l 0 [2.. ] l 1 cribar l 0 l 2 cribar l 1 cribar (cribar l 0 ) l 3 cribar l 2 cribar (cribar (cribar l 0 ))... Una función que devuelva la lista [ l 0, l 1, l 2, l 3,... ]. cribas :: [] cribas = iterate cribar [2.. ] El primer primo está al inicio de l 0, el segundo al inicio de l 1, el tercero al inicio de l 2, etc. La lista infinita de los número primos es: [ head l 0, head l 1, head l 2,... ] map head cribas Podemos definir: losprimos :: losprimos = map head cribas? take 10 losprimos [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] :: Informática Pepe Gallardo Universidad de Málaga 11.4

La criba de Eratóstenes (3) La evaluación perezosa es una técnica potente. Cuantos primos hay menores que 100?? takewhile (< 100) losprimos [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] ::? length (takewhile (< 100) losprimos) 25 : : Int Cuánto suman?? sum (takewhile (< 100) losprimos) 1060 : : Integer Cuál es el primer primo mayor que 100? primeroque :: (a Bool) [a] a primeroque p [ ] = error ninguno cumple la propiedad primeroque p (x : xs) p x = x otherwise = primeroque p xs? primeroque (> 100) losprimos 101 : : Integer Cuál es el primer primo que acaba en 9? acabaen :: Integer Integer Bool n acabaen d = (n mod 10 == d)? primeroque ( acabaen 9) losprimos 19 : : Integer Informática Pepe Gallardo Universidad de Málaga 11.5

11.3 Redes de procesos Deseamos calcular úna lista infinita con la sucesión de fibonacci Podemos definir una función para calcular el i-ésimo número de fibonacci fib :: Integer Integer fib 0 = 0 fib 1 = 1 fib (n + 2) = fib (n + 1) + fib n Usando map podemos construir la secuencia infinita: fibs :: fibs = map fib [0.. ] Por ejemplo? take 10 fibs [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] :: Problema: cada término de la sucesión se computa por separado Podríamos obtener una versión más eficiente si para computar un término solo sumamos los dos previos Esto se puede conseguir con una red de procesos Informática Pepe Gallardo Universidad de Málaga 11.6

Redes de procesos (2) Consideraremos una función map f :: [a] [b] un proceso f a 1, f a 2, f a 3... map f a 1, a 2, a 3... Para funciones zipwith g :: [a] [b] [c] g a 1 b 1, g a 2 b 2,... zipw ith g a 1, a 2,... b 1, b 2,... Para el operador (:) :: a [a] [a] a 1 a 1, a 2,..., a n,... : a 2,..., a n,... Conectando estos elementos podemos construir redes arbitrarias Por ejemplo, red que calcula [ x, f x, f (f x ), f (f (f x )),... ] x x, fx, f(fx),... : map f Informática Pepe Gallardo Universidad de Málaga 11.7

Los números de Fibonacci La red de procesos es 0 1 1, 2, 3... 0, 1, 1, 2, 3... 1, 1, 2,... fibs : : zipw ith(+) f a b El programa es: fibs :: fibs = f where f = 0 : a a = 1 : b b = zipwith (+) f a Podemos transformar el programa: fibs = f where f = 0 : a; a = 1 : b; b = zipwith (+) f a {por fibs = f } fibs = f where f = 0 : a; a = 1 : b; b = zipwith (+) fibs a {por f = 0 : a} fibs = 0 : a where a = 1 : b; b = zipwith (+) fibs a {por a = 1 : b} fibs = 0 : 1 : b where b = zipwith (+) fibs (1 : b) {ya que 1 : b = tail fibs} fibs = 0 : 1 : b where b = zipwith (+) fibs (tail fibs) {ya que b = zipwith (+) fibs (tail fibs)} fibs = 0 : 1 : zipwith (+) fibs (tail fibs) fibs :: fibs = 0 : 1 : zipwith (+) fibs (tail fibs) Informática Pepe Gallardo Universidad de Málaga 11.8

Los factoriales La red de procesos es 1 facts f : a b zipw ith ( ) 1 : c map (+1) El programa es: facts :: facts = f where f = 1 : a a = zipwith ( ) b f b = 1 : c c = map (+1) b Podemos transformar el programa: facts :: facts = 1 : zipwith ( ) [1..] facts Informática Pepe Gallardo Universidad de Málaga 11.9

Objetivos del tema El alumno debe: Conocer las funciones predefinidas para construir listas infinitas Saber como se evaluan las expresiones usando evaluación perezosa Saber construir redes de procesos para construir listas infinitas Saber construir un programa a partir de una red de procesos Informática Pepe Gallardo Universidad de Málaga 11.10