Programación Funcional

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

Algoritmos y programas. Algoritmos y Estructuras de Datos I

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

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Tema 3. Patrones y Definiciones de Funciones

INTERACCION ENTRE OBJETOS

UNIVERSIDAD MAYOR DE SAN SIMON FACULTAD DE CIENCIAS Y TECNOLOGÍA PLAN GLOBAL COMPUTACION I

Estructuras de Control. Secuencia y Selección

PROGRAMA DE CURSO. Escuela de Ingeniería de Sistemas y Computación Universidad del Valle Santiago de Cali, Colombia. Febrero 2007

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

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Elementos de un programa en C

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERIA SYLLABUS. PROYECTO CURRICULAR: Ingeniería de Sistemas

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1)

Tema 3. Patrones y Definiciones de Funciones

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

Nociones Básicas de Sémantica: Semántica Denotacional

ANEXO XVII DE LA RESOLUCION N

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

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

SYLLABUS de la Asignatura. Programación INF1201

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema: Sobrecarga. Objetivos. Materiales y Equipo. Introducción Teórica. Programación II. Guía No. 7

Tema 3: Tipos y clases

Verificación de programas. Algoritmos y Estructuras de Datos I. Semánticas formales: Primer cuatrimestre de 2016

Tema 4: Definición de funciones

Tema 6: Funciones recursivas

Introducción a Python. Cecilia Manzino

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

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

ESTRUCTURA DE ASIGNACIÓN

Manual de turbo pascal

Escuela de Ingeniería en Informática Empresarial SYLLABUS

Cuales son los 6 lenguajes de programacion mas usados actualmente. Cuales son los 6 lenguajes de programación mas usados actualmente.

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3

TEMA 6: INTRODUCCIÓN A UML

1. Preparar al estudiante para desarrollar aplicaciones de software utilizando un enfoque orientado a objetos.

Programación Orientada a Objetos con Java

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

1. Computadores y programación

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación imperativa. Algoritmos y Estructuras de Datos I. Lenguaje C. Segundo cuatrimestre de 2014

Computación I Curso 2016 Facultad de Ingeniería Universidad de la República

LP - Lenguajes de Programación

Capítulo 4. Lógica matemática. Continuar

Tema: Análisis Léxico

UNIVERSIDAD DE GUADALAJARA

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

Apuntes de Tipos Abstractos de Datos. Juan M. Molina Bravo

Estructuras de Control

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

1. PRINCIPIOS BÁSICOS DE PROGRAMACIÓN

Java para no Programadores

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

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

Fundamentos de Informática 3. Construcción de Software

Tema 2. Concepto de Algoritmo

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Crear diagramas basados en UML para la representación de la solución a un problema mediante el Paradigma Orientado a Objetos.

7.3. Estructura de un programa

Unidad II: Análisis semántico

Estructuras de control

Funciones como Subprogramas en C++

DISEÑO CURRICULAR ALGORÍTMOS, ESTRUCTURAS Y PROGRAMACIÓN II

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

III. Generación de Código orientado a objetos

Modelo de Orientación a Aspectos

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

4. Operadores Operador asignación

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Lógica proposicional. Ivan Olmos Pineda

Operadores y Expresiones

LÓGICA - DECISIONES. Hay dos tipos de expresiones lógicas: las expresiones lógicas relacionales y las expresiones lógicas combinacionales.

Tema: Estructuras de Selección en C#.

Introducción al Lenguaje de Programación C

FACULTAD DE INGENIERÍA INGENIERÍA EN COMPUTACIÓN UNIDAD DE APRENDIZAJE: ANÁLISIS DE LOS LENGUAJES DE PROGRAMACIÓN.

Resultado de Aprendizaje:

Ejercicios de Lógica Proposicional *

ESTRUCTURAS DE CONTROL

FUNDAMENTOS DE INFORMÁTICA

Programación Dinámica 1

PROGRAMA INSTRUCCIONAL

Programación Estructurada

Introducción a la programación

Tema: Funciones, Procedimientos y Recursividad en C#.

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Nombre de la Unidad de Aprendizaje. Clave de la UA Modalidad de la UA Tipo de UA Valor de créditos Área de formación

Programa Educativo: Área de Formación : Carácter de la asignatura

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Funciones como parámetros, funciones como resultados. Introducción a la Computación Patricia Borensztejn Clase 26

PROGRAMA: COMPUTACION I

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

CURSO NIVELACIÓN LÓGICA MATEMÁTICA PROYECTO UNICOMFACAUCA TU PROYECTO DE VIDA LAS PROPOSICIONES

FUNDAMENTOS DE INFORMÁTICA

Transcripción:

Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay

Objetivo del curso Este es un curso introductorio de programación funcional (PF) Veremos conceptos y técnicas de programación relativas a este paradigma Nos vamos a focalizar en un abordaje específico a PF que corresponde a lenguajes fuertemente tipados y con evaluación perezosa (lazy evaluation) Programaremos en el lenguaje Haskell

Material del curso Las transparencias de cada tema así como los prácticos van a estar disponibles en la plataforma EVA. Bibliografía Nos basaremos en el siguiente libro: Haskell: The craft of functional programming Simon Thompson Third Edition Pearson Education Limited 2011 A lo largo del curso se va a ir indicando que partes del libro se van tratando.

Modalidad del curso Este es un curso presencial por lo que se recomienda ir a clase. En caso de no poder, el material se va a ir dejando en la plataforma EVA. Se recomienda seguir los temas a través de la lectura de las transparencias y el libro.

Evaluación Una tarea de programación en las últimas semanas del curso. Puede ser realizada en grupos de hasta 2 estudiantes. Una prueba al final del curso. Se incluye todo lo visto en las clases y prácticos.

Haskell Haskell (http://www.haskell.org) es un lenguaje puramente funcional con evaluación perezosa, fuertemente tipado, de tipado estático e inferencia de tipos. Fue definido en 1990 por un comité internacional con el fin de establecer un estandar. Debe su nombre al del lógico Haskell B. Curry. Usaremos el compilador GHC (Glasgow Haskell Compiler) y su intérprete GHCi (https://www.haskell.org/ghc) Recomendamos instalarse Haskell Platform (https://www.haskell.org/platform) que trae GHC junto a una serie de paquetes.

Características de la PF es un paradigma de programación de la misma forma que lo son la programación imperativa, la programación orientada a objetos, o la programación lógica. Los lenguajes funcionales poseen poderosos mecanismos de abstracción y modularización, como por ejemplo: polimorfismo paramétrico, funciones de alto orden, etc. Gracias al alto nivel de abstracción y a una sintaxis minimal (como sucede en Haskell), los programas funcionales suelen ser mas concisos que en otros lenguajes.

Definición de funciones Un programa en PF consiste de una lista de definiciones (de funciones) que se expresan en una notación semejante a la usada en matemática. Las definiciones son escritas como ecuaciones, eventualmente acompañadas de una descripción de su tipo. Ejemplo: square :: Integer Integer square x = x x min :: (Integer, Integer) Integer min (x, y) = if x y then x else y

Evaluación de expresiones Computar un resultado se hace a través de la evaluación de expresiones, que pueden contener llamadas a las funciones definidas en el programa, o funciones definidas en el ambiente (por ej., Haskell Prelude) En la evaluación las definiciones de funciones actúan como reglas de reducción que permiten simplificar las expresiones. Por ejemplo, evaluemos square (3 + 4)

Evaluación de expresiones (2) Una forma de evaluarla: square (3 + 4) = {def +} square 7 = {def square } 7 7 = {def } 49

Evaluación de expresiones (3) Otra forma: square (3 + 4) = {def square } (3 + 4) (3 + 4) = {def +} 7 (3 + 4) = {def +} 7 7 = {def } 49 La expresión 49 se dice que está en forma normal o canónica debido a que no puede ser mas reducida.

Ausencia de efectos colaterales Propiedad: Para toda expresión e, cualquiera dos secuencias de reducción diferentes de e que terminen lo van a hacer en el mismo valor v. Esta es una propiedad muy relevante que caracteriza a la PF y la diferencia de otros paradigmas. Se debe en parte a la ausencia de efectos colaterales, en particular, a la inexistencia de una sentencia de asignación. Dicha propiedad no es válida en la mayoría de los lenguajes imperativos, en los que el método de cómputo se basa en cambiar los valores almacenados en memoria. El orden de ejecución de las sentencias es entonces crucial. Por ejemplo, en un lenguaje imperativo la expresión n + (n := 1) va a retornar distintos valores dependiendo de si se evalúa primero el sumando de la izquierda o el de la derecha.

Ausencia de efectos colaterales (2) La ausencia de efectos colaterales hace que en PF las variables se comporten como en la matemática: cada nombre está asociado/ligado a un único valor. En PF las variables denotan valores a diferencia de lo que ocurre en los lenguajes imperativos en que las variables denotan direcciones de memoria cuyo contenido puede ser modificado. Al igual que en la matemática, el valor retornado por una función sólo depende de los valores dados como entrada. No hay variables globales que puedan modificar el comportamiento de una función. La ausencia de efectos facilita el razonamiento sobre los programas funcionales, por ejemplo, para probar formalmente propiedades de los mismos.

Diseño composicional En PF es muy común construir nuevas funciones a partir de funciones mas sencillas previamente definidas. Ejemplo: quad :: Integer Integer quad x = double (double x) double double x :: Integer Integer = 2 x El patrón de aplicar una función y luego aplicar otra al resultado es muy usual en PF y amerita la definición de un operador específico, llamado de composición de funciones: (f. g) x = f (g x) De esta manera podemos escribir quad como: quad = double. double Que tipo tiene el operador de composición de funciones?

Diseño composicional (2) El patrón de definición de quad da para jugar un poco mas. Podemos abstraer la situación de que double está compuesta consigo misma e introducir una nueva definición: twice f = f. f Por lo tanto, quad = twice double Cual es el tipo de twice?

Próxima clase Tipos Básicos. Leer Capítulos 1 al 3 del libro.