0% encontró este documento útil (0 votos)
270 vistas8 páginas

Introducción A La Programación Funcional

Este documento presenta una introducción a la programación funcional usando Haskell. Explica conceptos como evaluación de expresiones, funciones de alto orden, tipado fuerte y transparencia referencial. También incluye ejemplos de funciones factoriales y quicksort en Haskell y otros lenguajes, y recursos para aprender Haskell.

Cargado por

martin_b92029147
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
270 vistas8 páginas

Introducción A La Programación Funcional

Este documento presenta una introducción a la programación funcional usando Haskell. Explica conceptos como evaluación de expresiones, funciones de alto orden, tipado fuerte y transparencia referencial. También incluye ejemplos de funciones factoriales y quicksort en Haskell y otros lenguajes, y recursos para aprender Haskell.

Cargado por

martin_b92029147
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

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. The Craft of Functional Programming
Second Edition. Simon Thompson
Addison-Wesley, ISBN 0-201-34275-8
http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/
A Gentle Introduction to Haskell.
Paul Hudak, John Peterson y Joseph H. Fasel.
http://www.haskell.org/tutorial/
Sitio web de Haskell: http://haskell.org
FAQ de Programación Funcional: http://www.cs.nott.ac.uk/~gmh/faq.html

4 Recursos locales:
web: http://www.fing.edu.uy/inco/cursos/progfunc
grupo de noticias: news://news.fing.edu.uy/fing.cursos.progfunc

5 Sobre paradigmas de Programación


Programación Imperativa:

programa: secuencia de instrucciones a ser ejecutadas por la máquina.


asignación: es la instrucción más simple que cambia el valor de una variable.
Instrucciones de control: selección, repetición.
Ejemplos: Pascal, Modula2, C, Java, Perl

6 Sobre paradigmas de Programación (2)


Programación Declarativa:

programa: especificación del problema a resolver


variables lógicas, no hay asignación, las variables no varían.
recursión en lugar de repetición
lenguaje lógico y matemático
Ejemplos: SQL, XSLT, prolog, lisp, ml, haskell

7 Programación Funcional
Modelo funcional Un programa funcional es un conjunto de declaraciones de funciones.

ejecución = evaluación de expresiones

fing.edu.uy/inco/cursos/…/uno.html 2/8
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, 123, 'a'

Aplicación:
f e_1 e_2 ...e_k

Donde f es una función y e_1 ... e_k son expresiones.

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 - 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.

fing.edu.uy/inco/cursos/…/uno.html 3/8
18/11/2010 Introducción a la Programación Funci…

11 Lenguajes Funcionales
Definiciónes tomadas de news:comp.lang.functional

Programación Funcional: es un estilo de programación que enfatiza la evaluación de expresiones, en lugar


de la ejecución de comandos. Las expresiones en estos lenguajes se forman utilizando funciones para
combinar valores básicos.

Lenguaje Funcional: es un lenguaje que soporta e incentiva la programación en un estilo funcional.

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. 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. Los programas son mas cortos y concisos


Más fáciles de entender (corregir y mantener)
Fuertemente tipado (no hay core dumps)
Reusabilidad (polimorfismo, alto orden)
Abstracción (TADs, clases, módulos)
Manejo dinámico de memoria (no hay punteros, new, etc)
Más fácil razonar formalmente acerca de los programas

14 Transparencia referencial.
Remplazar una subexpresión por otra subexpresión igual no altera el valor de una expresión

Sea la expresion:

fing.edu.uy/inco/cursos/…/uno.html 4/8
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.

15 Lógicas de Programación
Programación Imperativa Lógica de Hoare-Dijkstra, transformación de predicados. Compleja debido a
los efectos laterales y ejecución secuencial.

Programación Funcional Cálculo Lambda, Teoría de Tipos. Logica ecuacional.

Los programas funcionales permiten demostrar su correctitud más fácilmente.

16 El lenguaje Haskell
Haskell B. Curry (1900-1982). Lógico matemático creador de la lógica combinatoria y el lambda cálculo
tipado.

Lenguaje Haskell: Creado en 1987 por un comité integrado por varios grupos de investigación.

Estándar como lenguaje no estricto y puramente funcional.

Haskell 98 es la última versión del lenguaje.

17 Propiedades de Haskell
De lenguajes anteriores:

Funciones de alto orden.


Inferencia de tipos
Polimorfismo paramétrico
Semántica no estricta, evaluación perezosa
Listas por comprensión

18 Propiedades de Haskell(2)
Propiedades nuevas

Clases de tipos, overloading.


Entrada/salida funcional.
fing.edu.uy/inco/cursos/…/uno.html 5/8
18/11/2010 Introducción a la Programación Funci…
Soporte para mónadas

19 Algunos ejemplos
quicksort en C

qsort( a, lo, hi ) int a[], hi, lo;


{
int h, l, p, t;

if (lo < hi) {


l = lo;
h = hi;
p = a[hi];

do {
while ((l < h) && (a[l] <= p))
l = l+1;
while ((h > l) && (a[h] >= p))
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}
} while (l < h);

t = a[l];
a[l] = a[hi];
a[hi] = t;

qsort( a, lo, l-1 );


qsort( a, l+1, hi );
}
}

20 Ejemplos
quicksort en Haskell

qsort [] = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]

21 Ejemplos. Factorial
Pascalero

fing.edu.uy/inco/cursos/…/uno.html 6/8
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..n]

22 Ejemplos: Factorial (2)


Haskellero fundamentalista

fac = product . enumFromTo 1

Ver http://www.willamette.edu/~fruehr/haskell/evolution.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 . sort .


filter (flip elem "aeiou" . head) .
words

Eliminar los elementos repetidos consecutivos de una lista

noDup = map head . group

Otra versión:

noDup xs = [ x | (x,y) <- zip xs (tail xs), x!=y]

24 La mochila del haskellero


Software

Interprete Hugs: http://www.haskell.org/hugs/

Manual

Haskell-98 Language and Libraries: http://haskell.org/definition/

Referencias y cartillas:

Haskell Reference: http://zvon.org/other/haskell/Outputglobal/index.html


A Tour of the Haskell Prelude http://www.cs.uu.nl/~afie/haskell/tourofprelude.html

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

fing.edu.uy/inco/cursos/…/uno.html 8/8

También podría gustarte