Professional Documents
Culture Documents
PROGRAMACION
FUNCIONAL:
CONCEPTOS
y PERSPECTIVAS
Fabio Augusto Gonzle: Osorio
Instructor Asociado
Departamento de Ingeniera de Sistemas
Universidad Nacional de Colombia
fgonza@ ingenieria. ingsala. unaLedu.co.
Resumen
El presente artculo muestra conceptos
subyacentes a la programacin funcional, as como
caractersticas que los hacen un enfoque particular
y novedoso de la programacin que lo convierten
en una clara opcin frente al enfoque imperativo
convencional en el rea del desarrollo de software.
INTRODUCCIN
El estilo de programacin imperativa (es decir,
la programacin a travs de acciones que modifican
el estado del computador) ha dominado el panorama
de la programacin desde sus inicios; los lenguajes
de ms amplio uso estn basados en este paradigma:
Fortran, e, C++, Pascal, Basic, etc. Una razn
fundamental de este dominio reside en que los
lenguajes imperativos son ms cercanos a la forma
como realmente funciona la mquina.
---------=-~.::..:....:..:.
INGENIERA
E INVESTIGACIN
11
funcional
f (n)=L i
;=1
-~______;__;______;__;----
INGENIERA
E INVESTIGACIN
0-> O
I n-> f(n -1)+ n;;
EnSCHEME
(define f(lambda (n)(if(n=O)O (+(j(-n ln
En HASKELL (esta es una versin
recursiva, pero bastante elegante!):
no
n= sum [l..n]
fib(n) =~b(n
- 1) ~ fib(n - 2)
si n=lvn=2
en otro caso
INGENIERA
E INVESTIGACIN
A. Funciones
de alto orden
Lim
h~oo
f(x+h)-f(x)
h
let curryf=
B. Tipos algebraicos
Los lenguajes funcionales con tipos como
ML y Haskell dan la posibilidad de declarar tipos
adicionales a los tipos primitivos (int, char, float,
etc.). Los tipos declarados por el usuaro se definen
mediante constructores como la enumeracin:
de la
let direccin = norte
= fun
y -> x+y ;;
sur
oriente
occidente;;
1IIII~~fN~G~E_~_E_Rl_'~A~E~~
__E~S~T~IG~A~C_IO~'N
___
nodo ofint*arbo1bi*arbolbi;;
1O
= fun
vaca
-> O
cons (cabeza, resto) -> cabeza
+ Suma (resto);;
el
patrn)
=> 5 + 2 + 8 + O
D.Inferencia
primer
/ \
2 5
\
C. Emparejamiento
de tipos
~:.:....:....=..~II
INGENIERA
E INVESTIGACIN
a'
1I__
IN_G_EN_I_E_Rl_'A_E_IN_V_E_ST_I_G_A_C_IO_'N
en el
curry :(a' *b' -> c') -> (a' -> (b' -> c'))
el cual evidencia el alto orden de la funcin, pues
sta recibe como parmetro una funcin de tipo (a'
*b' -> c') y retoma una funcin (tambin de alto
orden) de tipo (a' -> (b' -> c')).
PERSPECTIVAS Y CONCLUSIONES
Las caractersticas que hemos ilustrado de
hasta ahora evidencian el gran potencial de los
lenguajes funcionales como herramientas que les
facilite a los programadores enfrentar la complejidad
creciente del desarrollo de software; esto nos
permite afirmar que en los prximos aos los
lenguajes funcionales tomarn un lugar en el rea
de desarrollo de software a gran escala, aliado de
lenguajes tan tradicionaies como e, e++,ADA [3,4].
La afirmacin anterior se sustenta con los siguientes
puntos:
Transparencia referencial. Este concepto
se refiere a la propiedad de los lenguajes
funcionales que hace que la misma expresin
siempre represente el mismo valor; esto
permite probar matemticamente la correccin
de un programa. La posibilidad de escribir
programas cuya correccin es probable en
vez de gastar el tiempo pescando errores
puede
revolucionar
el proceso
de
produccin de software.
Fundamentacin matemtica. Desde sus
inicios, la programacin funcional ha tenido
un gran componente matemtico, el clculo
Lambda, la lgica combinatoria, las teoras
de tipos, los sistemas de reescritura, la teora
de dominios y la teora de categoras son
algunas de las reas de la matemtica que la
fundamentan.
Esto le da pilares suficientemente slidos que le permiten ser la
base del desarrollo de una verdadera ciencia
de la programacin.
Eficiencia de compiladores e intrpretes.
Uno de los inconvenientes
que tradicionalmente se le ha achacado a los lenguajes
funcionales
es la ineficiencia
de sus
BIBLIOGRAFA
POUNTAIN.
D. "Functional
programming
comesof
age ": BYTE, Agosto de 1994
5. SETHI R. Programming
Wesley 2 Ed ., 1996.
Pginas
languages,
Addisson-
en internet
Preguntas
frecuentes
6. http://www.cs.nott.ac.uk/Department/Staff/
gmb/faq. html
Programacin
funcional
7. http://cm-bell-Iabs.com/cm/cs/who/wad
guide.html
8. http://www.lpac.ac.uklSELFuncArchive.html
ler/
HPC/Articles/
9. http://carol.fwi.uva.nl/-:jon/func.html
Lenguajes
10. CAML:
html
http://pauillac.inria.fr/camllindex-eng.
________
http://ai.mit.edu
INGENIERA
E INVESTIGACIN
11
1