Professional Documents
Culture Documents
PROGRAMACION FUNCIONAL”
Por:
Abrego, Alexander 9-000-0000
Caballero, Efraín 9-719-1952
Castillo, Jonathan 9-000-0000
De Gracia, Carlos 9-721-0393
Profesor:
Diego Santimateo
III Año
II Semestre
31 Octubre 2007
Paradigma de Programación Funcional
_________________________________________________________________________________
CONTENIDO
INTRODUCCION......................................................................................... ..........................3
Objetivos...................................................................................................... .......................5
Propósito.............................................................................................. ...............................5
CONCLUSIONES........................................................................................... ......................23
REFERENCIAS ELECTRONICAS...........................................................................................24
_________________________________________________________________________________
2
Paradigma de Programación Funcional
_________________________________________________________________________________
INTRODUCCION
La programación funcional nació como una proyección para realizar programas, los
cuales pretenden cubrir el campo de desarrollo de aplicaciones cuya solución se soporte o
fundamente en teorías o definiciones matemáticas.
Los lenguajes funcionales se basan en la idea de que un programa es una función con
un parámetro de entrada (la entrada) y un resultado (la salida). La ejecución de un programa
se ve como la aplicación de una función a la entrada, resultando en la salida. Lo que subyace
en el modelo de computación funcional es que un programador a la hora de escribir
programas piensa más en términos de qué es lo que lo que va a computar, en lugar de cómo,
cuándo y dónde. En un lenguaje funcional puro, no hay instrucciones de ningún tipo,
especialmente no hay instrucción de asignación especificando una variable o localización de
memoria donde se debe almacenar el resultado de un cómputo. Es decir, no existe el
concepto de estado. La computación se organiza mediante composición de funciones y los
valores que se computan son los resultados de una función que constituyen su salida.
Como primer punto conoceremos los objetivos del desarrollo de este proyecto y su
propósito.
_________________________________________________________________________________
3
Paradigma de Programación Funcional
_________________________________________________________________________________
_________________________________________________________________________________
4
Paradigma de Programación Funcional
_________________________________________________________________________________
Objetivos
Los objetivos esperados con el desarrollo de este proyecto los podemos resumir en dos
puntos:
Propósito
Este proyecto tiene como propósito presentar una documentación que permita conocer
las características de la programación funcional, además de valorar la solución de los
problemas propuestos a través de este tipo de programación.
Delimitación de tema
En la elaboración de este proyecto se hará uso de Standard ML para el desarrollo de
los programas de ejemplo.
_________________________________________________________________________________
5
Paradigma de Programación Funcional
_________________________________________________________________________________
Permite:
• Definir una amplia variedad de estructuras de datos de uso genérico.
• Definir funciones que aceptan otras funciones como argumentos. (Funciones de más
alto orden).
_________________________________________________________________________________
6
Paradigma de Programación Funcional
_________________________________________________________________________________
En aquel tiempo el uso de un ordenador era muy costoso y era lógico que el lenguaje
de programación guardara mucha relación con la arquitectura del ordenador. Un ordenador
consta de una unidad de control y una memoria. Por eso un programa consistía en
instrucciones para cambiar el contenido de la memoria. La unidad de control se encargaba
de ejecutarlas. De esta manera se creó el estilo de programación imperativa. Los lenguajes
de programación imperativa como Pascal y C se caracterizan por la existencia de
asignaciones ejecutadas consecutivamente.
Con cada computación, el resultado depende de una u otra forma de los parámetros.
Por esa razón, una función es una buena manera de especificar una computación. Esta es la
base del estilo de programación funcional. Un ‘programa’ consiste en la definición de una o
_________________________________________________________________________________
7
Paradigma de Programación Funcional
_________________________________________________________________________________
Con el tiempo, al bajar los precios de los ordenadores y al subir los precios de los
programadores, llega a ser más importante describir las computaciones en un lenguaje que
esté más cerca del ‘mundo del hombre’, que cerca del ordenador. Los lenguajes funcionales
se unen a la tradición matemática y no están muy influidos por la arquitectura concreta del
ordenador.
La base teórica de la programación imperativa fue dada (en Inglaterra) por Alan Turing
en los años treinta.
Fue en el comienzo de los años cincuenta cuando a alguien se le ocurrió usar esta
teoría efectivamente, como base de un lenguaje de programación. El lenguaje Lisp de John
McCarthy fue el primer lenguaje de programación funcional y fue el único por muchos años.
Aunque todavía se usa Lisp, no es un lenguaje que reúna las exigencias. Debido a la
creciente complejidad de los programas de ordenador, se hizo necesaria una mayor
verificación del programa por parte del ordenador. Por ello el tipado adquirió una gran
importancia. Por eso no es de extrañar que en los años ochenta se crearan un gran número
de lenguajes funcionales tipados. Algunos ejemplos son ML, Scheme (una adaptación de
Lisp), Hope y Miranda.
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los
híbridos. La diferencia entre ambos apunta en que los lenguajes funcionales híbridos son
menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes
procedimentales, como las secuencias de instrucciones o la asignación de variables.
En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva,
conservando a la vez su transparencia referencial, algo que no se cumple siempre con un
lenguaje funcional híbrido.
Lenguajes funcionales
Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los
lenguajes funcionales híbridos más conocidos son Lisp, Scheme, Ocaml y Standard ML
(estos dos últimos, descendientes del lenguaje ML).
como SML, otra muy significativa y difundida es una forma orientada a objetos denominada
CAML. Información de interés para estos lenguajes se puede encontrar siguiendo los
enlaces:
• http://www.haskell.org/
• http://www.smlnj.org/
• http://caml.inria.fr/
Los matemáticos desde hace un buen tiempo están resolviendo problemas usando el
concepto de función. Una función convierte ciertos datos en resultados. Si supiéramos cómo
evaluar una función, usando la computadora, podríamos resolver automáticamente muchos
problemas.
_________________________________________________________________________________
11
Paradigma de Programación Funcional
_________________________________________________________________________________
_________________________________________________________________________________
12
Paradigma de Programación Funcional
_________________________________________________________________________________
_________________________________________________________________________________
13
Paradigma de Programación Funcional
_________________________________________________________________________________
El valor que devuelve una función está únicamente determinado por el valor de sus
argumentos consiguiendo que una misma expresión tenga siempre el mismo valor (esta
propiedad se conoce como transparencia referencial). Es más sencillo demostrar la
corrección de los programas ya que se cumplen propiedades matemáticas tradicionales
como la propiedad conmutativa, asociativa, etc.
_________________________________________________________________________________
14
Paradigma de Programación Funcional
_________________________________________________________________________________
_________________________________________________________________________________
15
Paradigma de Programación Funcional
_________________________________________________________________________________
_________________________________________________________________________________
16
Paradigma de Programación Funcional
_________________________________________________________________________________
II. STANDARD ML
_________________________________________________________________________________
17
Paradigma de Programación Funcional
_________________________________________________________________________________
Los lenguajes Funcionales tienen deficiencias. Se podría decir que algunos problemas
de programación parece ser intrínsecamente con base en el estado. La uniformidad de la
representación que lenguajes funcionales ofrecen a continuación, se convierte en una
desventaja. Aunque una solución a ese problema sería posible que quizas tenga una
codificación oscura o antinatural. Otra posible preocupación es que la aplicación funcional
podría ser ineficaz en comparación con un simple lenguaje imperativo. Esto sería una
vergüenza, un lenguaje de programación no debería hacer difícil para un programador
escribir programas eficientes.
El hecho de que los tipos son asignados por el compilador también tiene la
consecuencia favorable de que las funciones Standard ML son generalmente más cortas que
las rutinas comparables aplicadas en los lenguajes en los que los tipos de variables, se
presentarán cuando la variable es declarada.
- "Hola Mundo";
_________________________________________________________________________________
18
Paradigma de Programación Funcional
_________________________________________________________________________________
ningún trabajo para calcular el valor de la expresión de entrada ya en su forma más simple, o
de forma normal. Un ejemplo más complejo sería la expresión 3 +4 esta es evaluada al valor
7.
- 3 +4,
it = 7: int
Observe que la expresión al ser evaluada se termina con punto y coma. El intérprete
permite a las expresiones pasar a través de más de una línea. Cuando esto ocurre, el prompt
cambia a "=" por ejemplo:
-4+4+
= 4;
Definición de funciones
Una función puede definirse usando la palabra clave fun. La definición de función
simple toma la forma:
Por ejemplo
fun doble x = 2 * X;
Estas funciones pueden ser escritas como antes. Para ejecutar una función
simplemente se da el nombre de la función seguida por el propio argumento. Por ejemplo:
_________________________________________________________________________________
19
Paradigma de Programación Funcional
_________________________________________________________________________________
doble 6;
Inc 100;
adda "tub";
El sistema debería darle los valores 12: int y 101: int y "la tuba": string de las
expresiones anteriores.
El SML puede funcionar en modo intérprete. Esto significa que se puede ir definiendo
funciones y utilizándolas de forma interactiva. A continuación describimos una sesión con el
SML. Lo que aparece en negrita es lo que se supone que teclearía el usuario, el resto es lo
que escribe el programa.
Standard ML of New Jersey, Version 110.0.7, September 28, 2000 [CM; autoload enabled]
- length [1,2,3] ;
val it = 3 : int
val append = fn : 'a list -> 'a list -> 'a list
val map = fn : ('a -> 'b) -> 'a list -> 'b list
_________________________________________________________________________________
20
Paradigma de Programación Funcional
_________________________________________________________________________________
Cuando aplicamos una función, nos da el resultado y nos dice cual es su tipo.
_________________________________________________________________________________
21
Paradigma de Programación Funcional
_________________________________________________________________________________
APLICACION PRÁCTICA
- fac 10;
En respuesta a esta llamada el compilador sml devuelve los tipos de valores que serán
introducidos, y los que serán devueltos.
Análisis de resultado
Como podemos ver, el manejo de lenguajes funcionales nos permite de manera muy
sencilla hacer definiciones simples, además de manejar conceptos que son muy entendibles
y relativamente fáciles de manejar.
_________________________________________________________________________________
22
Paradigma de Programación Funcional
_________________________________________________________________________________
CONCLUSIONES
Del desarrollo de este proyecto de investigación hemos podido obtener las siguientes
conclusiones:
• Del gran campo por explorar de las aplicaciones en la ingeniería, donde se podría
utilizar la Programación Funcional para dar soluciones más concretas, eficientes y
eficaces.
_________________________________________________________________________________
23
Paradigma de Programación Funcional
_________________________________________________________________________________
REFERENCIAS ELECTRONICAS
_________________________________________________________________________________
24