18/11/2010

Introducción a la Programación Funci…

Índice General
1 Objetivos 2 Evaluación 3 Bibliografía 4 Recursos locales: 5 Sobre paradigmas de Programación 6 Sobre paradigmas de Programación (2) 7 Programación Funcional 8 Expresiones 9 Ejemplos 10 Evaluación de expresiones 11 Lenguajes Funcionales 12 Expresiones en Lenguajes Imperativos 13 Qué tiene de bueno la PF? 14 Transparencia referencial. 15 Lógicas de Programación 16 El lenguaje Haskell 17 Propiedades de Haskell 18 Propiedades de Haskell(2) 19 Algunos ejemplos 20 Ejemplos 21 Ejemplos. Factorial 22 Ejemplos: Factorial (2) 23 Otros ejemplos 24 La mochila del haskellero

1 Objetivos
Introducir los conceptos básicos de la Programación Funcional usando Haskell como lenguaje de programación. Docente: Guillermo Calderón Créditos: 7 Cupo: no hay Duración: 7 semanas

2 Evaluación
1. 2 tareas obligatorias 2. Evaluación escrita Fechas aproximadas: Tarea 1: semana 3 (2 semanas)
fing.edu.uy/inco/cursos/…/uno.html 1/8

18/11/2010 Introducción a la Programación Funci… Tarea 2: semana 4 (2 semanas) Escrito: última semana 3 Bibliografía Haskell. las variables no varían.fing.uk/~gmh/faq.uy/fing. XSLT. Instrucciones de control: selección. Perl 6 Sobre paradigmas de Programación (2) Programación Declarativa: programa: especificación del problema a resolver variables lógicas.uy/inco/cursos/…/uno.edu. C.cs.ac.edu. ml.html 4 Recursos locales: web: http://www. lisp. Ejemplos: Pascal. The Craft of Functional Programming Second Edition. haskell 7 Programación Funcional Modelo funcional Un programa funcional es un conjunto de declaraciones de funciones. Modula2.uy/inco/cursos/progfunc grupo de noticias: news://news.org/tutorial/ Sitio web de Haskell: http://haskell.cs. Simon Thompson Addison-Wesley. no hay asignación. prolog.ac.fing. recursión en lugar de repetición lenguaje lógico y matemático Ejemplos: SQL.progfunc 5 Sobre paradigmas de Programación Programación Imperativa: programa: secuencia de instrucciones a ser ejecutadas por la máquina.haskell.nott.ukc.edu. Fasel.org FAQ de Programación Funcional: http://www.cursos. Paul Hudak. Java. asignación: es la instrucción más simple que cambia el valor de una variable. ejecución = evaluación de expresiones fing.html 2/8 . John Peterson y Joseph H. repetición.uk/people/staff/sjt/craft2e/ A Gentle Introduction to Haskell. http://www. ISBN 0-201-34275-8 http://www.

e_k Donde f es una función y e_1 .html 3/8 .. e_k son expresiones.. 123.uy/inco/cursos/…/uno.1)) 10 Evaluación de expresiones Se sustituye una subexpresión por otra más *reducida* doble (cuad (9 + 1)) = doble (cuad (9 + 1)) = 2 * (cuad (9 + 1)) = 2 * (cuad 10) = 2 * (10 * 10) = 2 * 100 = 200 la evaluación puede diferir según cuál subexpresión se elija para reducir.18/11/2010 Introducción a la Programación Funci… expresión --> valor Una máquina funcional actúa como una calculadora: Ingresar definiciones de funciones Evaluar expresiones 8 Expresiones Cómo se construyen expresiones? Constantes: True.edu. fing.. 'a' Aplicación: f e_1 e_2 . 9 Ejemplos Definición de funciones: doble x = 2 * x cuad x = x * x doblecuad x = doble (cuad x) Expresiones: 2 + doble 8 doble (cuad (9 + 1)) cuad (doble (3 ..

Remplazar una subexpresión por otra subexpresión igual no altera el valor de una expresión Sea la expresion: fing. Sin embargo una función puede tener efectos laterales: f(x)+ x x + f(x) 13 Qué tiene de bueno la PF? Algunas propiedades buenas de los lenguajes funcionales: Brevedad. new.html 4/8 . Lenguaje Funcional: es un lenguaje que soporta e incentiva la programación en un estilo funcional. Las expresiones en estos lenguajes se forman utilizando funciones para combinar valores básicos. Los programas son mas cortos y concisos Más fáciles de entender (corregir y mantener) Fuertemente tipado (no hay core dumps) Reusabilidad (polimorfismo.edu. en lugar de la ejecución de comandos. etc) Más fácil razonar formalmente acerca de los programas 14 Transparencia referencial.uy/inco/cursos/…/uno. clases. 12 Expresiones en Lenguajes Imperativos Lenguaje C Los comandos y las instrucciones se mezclan: c++ == (x + y) (c = getc()) != 'o' en general todo comando retorna un valor y produce algún efecto lateral Lenguaje Pascal Expresiones e instrucciones son disjuntos.lang. alto orden) Abstracción (TADs. módulos) Manejo dinámico de memoria (no hay punteros.functional Programación Funcional: es un estilo de programación que enfatiza la evaluación de expresiones.18/11/2010 Introducción a la Programación Funci… 11 Lenguajes Funcionales Definiciónes tomadas de news:comp.

uy/inco/cursos/…/uno. Lógico matemático creador de la lógica combinatoria y el lambda cálculo tipado. Estándar como lenguaje no estricto y puramente funcional. Compleja debido a los efectos laterales y ejecución secuencial. evaluación perezosa Listas por comprensión 18 Propiedades de Haskell(2) Propiedades nuevas Clases de tipos.edu. Haskell 98 es la última versión del lenguaje. fing. Entrada/salida funcional. 17 Propiedades de Haskell De lenguajes anteriores: Funciones de alto orden.18/11/2010 Introducción a la Programación Funci… f(x + (cuad 2)) Sabemos que cuad 2 = doble 2 entonces f(x + (cuad 2)) = f(x + (doble 2)) Esta propiedad no la cumplen los lenguajes imperativos. Programación Funcional Cálculo Lambda. overloading. transformación de predicados. Teoría de Tipos. 16 El lenguaje Haskell Haskell B.html 5/8 . Curry (1900-1982). Lenguaje Haskell: Creado en 1987 por un comité integrado por varios grupos de investigación. Inferencia de tipos Polimorfismo paramétrico Semántica no estricta. Los programas funcionales permiten demostrar su correctitud más fácilmente. 15 Lógicas de Programación Programación Imperativa Lógica de Hoare-Dijkstra. Logica ecuacional.

18/11/2010 Introducción a la Programación Funci… Soporte para mónadas 19 Algunos ejemplos quicksort en C qsort( a. while ((h > l) && (a[h] >= p)) h = h-1. hi. { int h. y >= x] 21 Ejemplos.xs. qsort( a. l+1. l-1 ).edu. do { while ((l < h) && (a[l] <= p)) l = l+1. p = a[hi]. } } while (l < h).uy/inco/cursos/…/uno. t. Factorial Pascalero fing. qsort( a. hi ) int a[]. y < x] elts_greq_x = [y | y <. t = a[l]. a[hi] = t. if (l < h) { t = a[l]. lo. a[l] = a[h].xs. lo. p. } } 20 Ejemplos quicksort en Haskell qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <.html 6/8 . lo. a[l] = a[hi]. h = hi. hi ). a[h] = t. if (lo < hi) { l = lo. l.

haskell.uy/inco/cursos/…/uno.org/hugs/ Manual Haskell-98 Language and Libraries: http://haskell.org/other/haskell/Outputglobal/index.n] 22 Ejemplos: Factorial (2) Haskellero fundamentalista fac = product ..nl/~afie/haskell/tourofprelude.html 7/8 .uu. x!=y] 24 La mochila del haskellero Software Interprete Hugs: http://www. enumFromTo 1 Ver http://www. head) . sort .18/11/2010 Introducción a la Programación Funci… fac n = if n == 0 then 1 else n * fac (n-1) Haskellero junior fac 0 = 1 fac (n+1) = (n+1) * fac n Haskellero senior fac n = foldr (*) 1 [1.org/definition/ Referencias y cartillas: Haskell Reference: http://zvon. filter (flip elem "aeiou" .cs. words Eliminar los elementos repetidos consecutivos de una lista noDup = map head .html fing.edu/~fruehr/haskell/evolution.zip xs (tail xs).html (The Evolution of a Haskell Programmer) 23 Otros ejemplos Dado un texto obtener una lista ordenada de todas palabras que comienzan con vocal: palVocal = unlines . group Otra versión: noDup xs = [ x | (x.html A Tour of the Haskell Prelude http://www.y) <.willamette.edu.

html 8/8 .18/11/2010 Introducción a la Programación Funci… Errores en hugs http://www.uk/people/staff/sjt/craft2e/errors/allErrors.ac.cs.html fing.uy/inco/cursos/…/uno.ukc.edu.

Sign up to vote on this title
UsefulNot useful