Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario

Documentos relacionados
Tema 1: Programación Funcional

Tema 10: Evaluación perezosa

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

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

Programación Declarativa. ETSI Informática Dpto. Lenguajes y Ciencias de la Computación Ingeniería Técnica en Informática (Sistemas A) Curso

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

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

Tema 1: Introducción a la programación funcional

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 1: Introducción a la programación funcional

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 4: Definición de funciones

Tema 4: Definición de funciones

Tema 6: Funciones recursivas

Algoritmos y programas. Algoritmos y Estructuras de Datos I

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

Tema 8: Funciones de orden superior

Programación Funcional

Tema 8: Funciones de orden superior

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Tema II: Introducción al Lenguaje Funcional

Tema 4. Funciones de orden superior

Tema 7. El sistema de clases

Tema 12: Analizadores sintácticos funcionales

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

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

Tema 9: Declaraciones de tipos y clases

GUÍA DE APRENDIZAJE PROGRAMACIÓN DECLARATIVA GRADUADO EN INGENIERÍA DE SOFTWARE

Tema 11: Analizadores sintácticos funcionales

Tema 2. Tipos predefinidos

Tema 9: Declaraciones de tipos y clases

Programación Funcional

Tema 4. Funciones de orden superior

Tipos en Haskell. Cecilia Manzino

Introducción a Haskell. El lenguaje Haskell

Tema 7: Razonamiento sobre programas

Introducción a Haskell. Cecilia Manzino

Pontificia Universidad Católica del Ecuador

Tema 5: Definiciones de listas por comprensión

Tema 5: Definiciones de listas por comprensión

Guardas y Tipos de datos

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

Lenguajes funcionales: λ-cálculo

Tema 6. Definiciones de tipos

Gramáticas de atributos

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

Programación Declarativa Curso

1.2 Uso del software como una calculadora. Iniciación a los operadores y almacenamiento de datos.

Tipos de datos algebraicos

Tema 2: Introducción a Haskell

Fundamentos de Programación. Resolución de Problemas y Diseño de Programas. Fundamentos de Programación. Página 0 de 27

Dra. Jessica Andrea Carballido

Mecanismo de Reducción

Universidad Católica San Pablo Facultad de Ingeniería y Computación Escuela Profesional de Ciencia de la Computación SILABO

PROGRAMA DE CURSO. Horas de Trabajo Personal ,5 5,5

Tipos de Datos Simples Contenido del Tema

Dra. Jessica Andrea Carballido

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

Horas teóricas: 2 Horas prácticas: 4 Total de Horas: 6 INTRODUCCION A LA PROGRAMACION

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)

Tecnología de la Programación

Modularización. Bibliografía

PROYECTO DOCENTE ASIGNATURA: "Informática" Grupo: Grupo de Clases Teóricas Informática(922540) Titulacion: Grado en Matemáticas Curso:

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

Introducción al Lenguaje "C++"

El lenguaje C. 1. Identificadores, constantes y variables

MATEMÁTICAS 2º ESO. Criterios de evaluación

PROGRAMACIÓN DECLARATIVA

Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1)

Planificaciones Algoritmos y Programación I. Docente responsable: GUARNA PABLO FRANCISCO. 1 de 6

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

PROYECTO DOCENTE ASIGNATURA: "Lógica y Programación"

Tema 3. Tipos de datos simples

Metodología de la Programación (12016)

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

CALCULO GRADO EN INGEN. INFORM. DEL SOFTWARE PRACTICA 1. INTRODUCCIÓN A MATLAB

Utilizar correctamente las fracciones aritméticas y algebraicas en la simplificación de expresiones y en la solución de problemas.

Funciones de Plegado sobre listas

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Procesadores de lenguaje Tema 5 Comprobación de tipos

Tipos de datos y clases de tipos

Datos Elementales y formato de un programa en Java

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia:

Introducción al Lambda Cálculo (C)

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018

Lenguajes de Programación Programación funcional

14/03/2018. Problemas, Algoritmos y Programas. Problemas, Algoritmos y Programas. Programas y Lenguajes. Programas y Lenguajes. Programas y Lenguajes

Tema 2. Concepto de Algoritmo

PROGRAMACIÓN ORIENTADA A OBJETOS. Programa sintético PROGRAMACIÓN ORIENTADA A OBJETOS III Introducción a la Orientación a Objetos

Tema 13: Aplicaciones de programación funcional

Transcripción:

Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Temario 1 Introducción y semántica operacional 2 Tipos predefinidos 3 Patrones y Definiciones de Funciones 4 Funciones de orden superior 5 Polimorfismo 6 Definiciones de tipos 7 El sistema de clases 8 Listas 9 Árboles 10 Razonamiento ecuacional

Bibliografía Razonando con Haskell. Un curso sobre programación funcional. Blas Ruiz, Francisco Gutiérrez, Pablo Guerrero y José Gallardo. Thomson, 2004. (http://www.lcc.uma.es/razonandoconhaskell) Introduction to Functional Programming using Haskell. Richard Bird. Prentice Hall, 1998. The Haskell School of Expression. Learning Functional Programming through multimedia. Paul Hudak. Cambridge University Press, 2000. Haskell. The Craft of Functional Programming. Simon Thompson. Addison-Wesley, 1999. Profesor Pepe Gallardo. Despacho 3.2.50. pepeg@lcc.uma.es Web asignatura http://www.lcc.uma.es/ pepeg/mates

Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 1. Introducción y semántica operacional 1.1 Programación Funcional 1.2 El lenguaje Haskell 1.3 La notación Currificada Aplicación de funciones Definición de funciones 1.4 Sesiones y declaraciones 1.5 Reducción de expresiones Orden de reducción aplicativo Orden de reducción normal Evaluación Perezosa

1.1 Programación Funcional Programar: especificar cómo resolver un problema. Un modo natural de describir programas es mediante funciones. El estilo funcional está basado en expresiones: Un programa es un conjunto de definiciones de funciones matemáticas El programador define funciones El ordenador evalúa la expresión Ventajas: Permite escribir programas claros, concisos y con alto nivel de abstracción Soporta Software reusable Facilita el uso de la verificación formal Usaremos Haskell 98 http://haskell.org Informática Pepe Gallardo Universidad de Málaga 1.1

1.2 El lenguaje Haskell Haskell es un lenguaje funcional Puro: Una misma expresión denota siempre el mismo valor (Transparencia referencial). Verificación formal relativamente fácil. No estricto: El orden utilizado para reducir expresiones es normal. Las implementaciones de Haskell suelen usar evaluación perezosa. Permite trabajar con estructuras infinitas. Fuertemente tipado: Cada elemento tiene un tipo. Se usa para comprobar el uso consistente de los elementos. Usos inconsistentes dan lugar a errores de tipo. Muchos errores se detectan pronto. Informática Pepe Gallardo Universidad de Málaga 1.2

1.3 La notación Currificada Aplicación de funciones En Matemáticas la aplicación de funciones es denotada usando paréntesis: f (a, b) + c d aplicar la función f a los argumentos a y b En Haskell la aplicación de funciones es denotada usando espacios (notación currificada): f a b + c d aplicar la función f a los argumentos a y b En Haskell la aplicación de funciones tiene prioridad máxima: g a + b significa (g a) + b y NO g (a + b) En Haskell los argumentos compuestos van entre paréntesis: f (a + b) c aplicar la función f a dos args: (a + b) y c Ejemplos: Matemáticas g (x) f (x, y) Haskell g x f x y g (f (x, y)) g (f x y) f (x, g (y)) f x (g y) g (x + y) g (x + y) g (x) + y g x + y Informática Pepe Gallardo Universidad de Málaga 1.3

Definición de funciones Se usa también la notación currificada: Un comentario g : Integer Integer g x = x + 1 f : Integer Integer Integer f x y = x + y + 2 doble :: Integer Integer doble x = x + x cuadruple : Integer Integer cuadruple x = doble (doble x ) Significado: nombre fun {}}{ f f }{{} nombre fun x }{{} par. 1 0 {}}{ tiene tipo Tipo Arg {}}{ 10 :: y }{{}}{{} = par. 2 0 se define Integer x + y + 2 }{{} resultado Tipo Arg 2 {}}{ 0 Integer Tipo Res {}}{ Integer Nombres de función: comienzan por minúscula f f fun3 fun 3 Nombres de parámetros: comienzan por minúscula x y x x1 xs Nombres de tipos: comienzan por mayúscula Integer Bool Char Informática Pepe Gallardo Universidad de Málaga 1.4

1.4 Sesiones y declaraciones El ordenador funciona como una calculadora o evaluador:? Valores numéricos enteros:? 1 + 2 3 : Integer Valores reales:? cos pi 1.0 : Double Solo los argumentos compuestos van entre paréntesis:? cos (2 pi) 1.0 :: Double Ejemplo más elaborado:? [1..5] [1, 2, 3, 4, 5] :: [Integer]? sum [1..10] 55 : : Integer Informática Pepe Gallardo Universidad de Málaga 1.5

Sesiones y declaraciones (2) Funciones de más de un argumento:? mod 10 3 1 : Integer? mod 10 (3 + 1) 2 : Integer Haskell proporciona un rico conjunto de elementos predefinidos Este conjunto es extensible: el programador puede definir nuevas funciones, operadores y tipos de datos. Ejemplo. función que calcula el sucesor de un número entero: sucesor : Integer Integer sucesor x = x + 1 Tras proporcionar la declaración de función anterior al evaluador:? sucesor 3 4 : Integer? 10 sucesor 3 40 : : Integer Una función de dos argumentos: sumacuadrados :: Integer Integer Integer sumacuadrados x y = x x + y y? sumacuadrados 2 (sucesor 3) 20 : : Integer? sumacuadrados (2 + 2) 3 25 : : Integer Informática Pepe Gallardo Universidad de Málaga 1.6

1.5 Reducción de expresiones El evaluador calcula el resultado de una expresión utilizando las definiciones de las funciones involucradas. Ejemplo cuadrado : Integer Integer cuadrado x = x x 2 + cuadrado 3 2 + (3 3) 2 + 9 ===> {por el operador (+)} 11 Cada uno de los pasos efectuados es una reducción. En cada reducción, el evaluador busca una parte de la expresión que sea simplificable (redex o reducto) y la simplifica. Cuando una expresión no puede ser reducida más se dice que está en forma normal. Labor del ordenador: buscar un redex en la expresión, reducirlo y repetir este proceso hasta que la expresión esté en forma normal. Informática Pepe Gallardo Universidad de Málaga 1.7

Reducción desde dentro hacia fuera La definición del comportamiento del evaluador dada es ambigua. Qué pasa cuando hay más de un redex? Podemos reducir la expresión desde dentro hacia fuera (reducir primero aquellos reductos más anidados). cuadrado : Integer Integer cuadrado x = x x cuadrado(cuadrado 3) cuadrado(3 3) cuadrado 9 9 9 81 Esta estrategia presenta problemas. Informática Pepe Gallardo Universidad de Málaga 1.8

Reducción desde fuera hacia dentro Reducir la expresión desde fuera hacia dentro (reducir primero los reductos menos anidados). La definición de la función cuadrado cuadrado : Integer Integer cuadrado x = x x puede ser vista como una regla de reescritura: cuadrado x ===> x x Se pasan los argumentos a las funciones como expresiones sin reducir, no como valores. cuadrado(cuadrado 3) (cuadrado 3) (cuadrado 3) (3 3) (cuadrado 3) ===> {por la definición de ( )} 9 (cuadrado 3) 9 (3 3) 9 9 81 Observación: los operadores aritméticos son estrictos. Informática Pepe Gallardo Universidad de Málaga 1.9

Importancia de la estrategia de reducción Transparencia referencial: una misma expresión denota siempre el mismo valor. Consecuencia: Sea cual sea la estrategia seguida en las reducciones, el resultado final (el valor 81) coincide (si se alcanza). La elección de un redex equivocado puede hacer que no se obtenga la forma normal de una expresión. Ejemplo: infinito :: Integer infinito = 1 + infinito cero :: Integer Integer cero x = 0 Comportamiento esperado n : Integer. cero n ===> 0. Si reducimos siempre el redex más interno: cero inf inito ===> {por definición de infinito} cero (1 + inf inito) ===> {por definición de infinito} cero (1 + (1 + infinito)) ===> {por definición de infinito}... Si reducimos el redex más externo: cero inf inito ===> {por definición de cero} 0 La estrategia utilizada para seleccionar el redex es crucial, ya que puede hacer que se obtenga o no la forma normal de la expresión. Informática Pepe Gallardo Universidad de Málaga 1.10

Orden de reducción aplicativo Seleccionar en cada reducción el redex más interno (el más anidado). En caso de que existan varios reductos que cumplan la condición anterior, se selecciona el que aparece más a la izquierda en la expresión. Esto significa que Ante una aplicación de función, se reducen primero los argumentos de la función para obtener sus correspondientes valores (paso de parámetros por valor). A los evaluadores que utilizan este orden se los llama estrictos o impacientes. Problemas: A veces, se efectúan reducciones que no son necesarias: cero (10 4) cero 40 ===> {por definición de cero} 0 No encuentra la forma normal de ciertas expresiones: cero inf inito ===> {por definición de infinito} cero (1 + inf inito) ===> {por definición de infinito} cero (1 + (1 + infinito)) ===> {por definición de infinito}... Informática Pepe Gallardo Universidad de Málaga 1.11

Orden de reducción normal Seleccionar el redex más externo (menos anidado) En caso de conflicto, de entre los más externos el que aparece más a la izquierda de la expresión. Esto significa que Se pasan como argumentos expresiones sin evaluar necesariamente (paso de parámetros por nombre) A los evaluadores que utilizan este orden se los llama no estrictos. Ventajas: Es normalizante: si la expresión tiene forma normal, una reducción mediante este orden la alcanza. (Teorema de estandarización). Un evaluador no estricto solo reducirá aquellos reductos que son necesarios para calcular el resultado final. Problema: La reducción de los argumentos puede repetirse (menor eficiencia). cuadrado(cuadrado 3) (cuadrado 3) (cuadrado 3) (3 3) (cuadrado 3) ===> {por la definición de ( )} 9 (cuadrado 3) 9 (3 3) 9 9 81 Informática Pepe Gallardo Universidad de Málaga 1.12

Evaluación Perezosa La Evaluación perezosa soluciona este problema. Evaluación perezosa = paso por nombre + recordar los valores de los argumentos ya calculados (evita que el cálculo se repita) Cada expresión se representa mediante un grafo. cuadrado cuadrado 3 ===> * cuadrado 3 * * 81 = = * 9 3 La reducción de la figura la escribiremos como: cuadrado (cuadrado 3) a a donde a = cuadrado 3 a a donde a = b b donde b = 3 a a donde a = 9 81 No se realizarán más reducciones que utilizando paso por valor. Posee las ventajas del paso por nombre y no es menos eficiente que el paso por valor. Informática Pepe Gallardo Universidad de Málaga 1.13

Objetivos del tema El alumno debe: Conocer las bases del estilo de programación funcional Conocer las principales características de Haskell Conocer la notación currificada de Haskell Conocer los principales órdenes de reducción: aplicativo y normal Conocer las principales ventajas e inconvenientes de cada orden de reducción Saber reducir expresiones utilizando los distintos órdenes Informática Pepe Gallardo Universidad de Málaga 1.14