Programacion Funcional
Programaci´n Funcional
o
“Antes de la existencia de los ordenadores se inventaron m´todos para resolver problemas. Por tanto, no
e
exist´ la necesidad de hablar en t´rminos de una memoria que cambie por instrucciones en un programa. En la
ıa
e
´
matem´tica de los ultimos cuatrocientos a˜os son muy importantes las funciones. Estas establecen la relaci´n
a
´
n
o
entre los par´metros(la “entrada”) y el resultado (la “salida”) de procesos definidos. Con cada computaci´n,
a
o
el resultado depende de una u otra forma de los par´metros. Por esa raz´n, una funci´n es una buena manera
a
o
o
de especificar una computaci´n. Esta es la base del estilo de programaci´n funcional. Un “programa” consiste
o ´
o
en la definici´n de una o m´s funciones. Para la ejecuci´n de unprograma, se dan par´metros a una funci´n
o
a
o
a
o
y el ordenador tiene que calcular el resultado. Con este tipo de computaci´n existe libertad en la manera de
o
ejecuci´n”.1
o
El paradigma de programaci´n funcional esta soportado principalmente por las funciones de orden–superior
o
(funciones que toman una o m´s funciones como par´metros de entrada o funciones que devuelven una funci´n
aa
o
como salida) y la recursi´n. La mayor´ de los lenguajes de programaci´n funcional est´n influenciados por el
o
ıa
o
a
c´lculo lambda. El c´lculo lambda es un sistema formal desarrollado para expresar la definici´n de funci´n, la
a
a
o
o
aplicaci´n de funciones y la recursi´n.
o
o
Algunos de los lenguajes de programaci´n del paradigma funcional son:
o
1. puros (Gofer, Haskell )2. impuros (Scheme, Lisp)
3.1.
Caracter´
ısticas del paradigma funcional
∗ Programaci´n declarativa
o
∗ Definici´n y evaluaci´n de funciones
o
o
∗ Uso de la recursi´n
o
∗ Funciones como datos primitivos
∗ Seguridad en procesos concurrentes (thread–safe)
3.2.
Lenguaje Scheme
Scheme2 , tiene una sintaxis de lenguaje muy reducida. No necesita de reglas de precedencia, yaque, en
esencia carece de operadores: usa notaci´n prefija para todas las llamadas a funci´n.
o
o
Scheme tambi´n permite la creaci´n de procedimientos an´nimos.
e
o
o
3.2.1.
Reglas para evaluar una expresi´n e de Scheme:
o
1. Si e es un valor primitivo, devuelve ese mismo valor
2. Si e es una variable, devuelve su valor asociado
3. Si e es una expresi´n del tipo (f arg1 . . . argn), donde f es el nombre de una funci´n primitiva (‘+’, ‘−’, . . .)
o
o
eval´a arg1 . . . argn y aplica la funci´n al resultado
u
o
1 Jeroen
Fokker. Programaci´n Funcional. Universidad de Utrecht. 1996.
o
2 http://www.plt-scheme.org/software/drscheme/tour/tour.html
1
Universidad Central – Colombia
Docente: Wilson Soto
4. Si e es una expresi´n del tipo (f arg1 . . . argn ),donde f es el nombre de una funci´n compuesta (definido
o
o
con un define), sustituir f por su cuerpo, reemplazando cada par´metro formal de la funci´n por el
a
o
correspondiente argumento evaluado. Ejemplo:
(define
(define
(define
> (f (+
3.2.2.
(double x) (+ x x))
(square y) (* y y))
(f z) (+ (square (double z)) 1))
2 1))
Definici´n y evaluaci´n de funciones
o
o
EnScheme se pueden asociar valores a nombres mediante la funci´n define. Tambi´n, permite asociar un
o
e
nombre de funci´n con la correspondiente definici´n en el entorno.
o
o
La forma general de la definici´n de una funci´n es:
o
o
(define () )
a
Ejemplo: definir la funci´n f (x, y) = x2 + y 2 .
o
(define (cuadrado x) (* x x))
>(+ (cuadrado 3) (cuadrado 2))
(define (sumacuadrados x y) (+(cuadrado x) (cuadrado y)))
>(sumacuadrados 2 3)
Ejemplo: definir la funci´n f (a) = (a + 1)2 + (a − 1)2 .
o
(define (func a) (sumacuadrados (+ a 1) (- a 1)))
>(func 5)
Ejemplo: Un n´mero n es igual a 5.
u
(define (es=5? n) (= n 5))
>(es=5? 5)
>(es=5? 50)
Ejemplo: Un n´mero n est´ entre 6 y 9.
u
a
(define (entre6y9? n) (and (> n 6)(> 9 n)))
>(entre6y9? 5)
3.2.3.
Condicionales...
Regístrate para leer el documento completo.