programación lógica funcional
Click here to load reader
-
Upload
angelita-vargas-perez -
Category
Documents
-
view
226 -
download
2
description
Transcript of programación lógica funcional
INSTITUTO TECNOLOGICO DE TUXTLA
GUTIERREZ
CRESUD ACALA
ASESOR:
Ing. Guadalupe Del Rosario Aguilar Lopez
MATERIA
Programacion Logica y funcional
UNIDA 2
TEMA
Concepto de Programación Funcional
ALUMNA
Vargas Pérez María de los Ángeles 12270303 A
15° Cuatrimestre
ACALA CHIAPAS
OCTUBRE DEL 2015
1.INTRODUCCION
El presente trabajo muestra conceptos importantes sobre la programación
funcional, así como características que los hacen un enfoque particular y
novedoso de la programación que lo convierten en una parte importante en el área
del desarrollo de software
2.PRIMER CONCEPTO DE PROGRAMACIÓN
FUNCIONAL.
El estilo de programación imperativa (es decir, la programación a través de
acciones que modifican el estado del computador) ha dominado el panorama de la
programación desde sus inicios; los lenguajes de más amplio uso están basados
en este paradigma: Fortran, e, C++, Pascal, Basic, etc. Una razón fundamental de
este dominio reside en que los lenguajes imperativos son más cercanos a la forma
como realmente funciona la máquina.
Existen otros paradigmas de programación diferentes al imperativo como la
programación funcional y la programación lógica, cuyo estudio, desarrollo y uso
han estado principalmente restringidos al ámbito académico. La programación
funcional, es casi tan antigua como la imperativa; el primer lenguaje funcional,
LlSP, fue desarrollado en la misma época en la que se desarrolló FORTRAN.
Sin embargo, la programación funcional ha estado tradicionalmente circunscrita a
áreas de aplicación específicas como la inteligencia artificial y la computación
simbólica. A pesar de la hegemonía de la programación imperativa la
programación funcional cada vez toma más fuerza gracias a su capacidad
expresiva, que permite escribir programas más compactos, y a su transparencia
referencial que posibilita la sencilla verificación matemática de propiedades de los
programas. Igualmente, características como la recolección automática de basura,
los sistemas de inferencia de tipos, el polimorfismo, la orientación a objetos, el
emparejamiento de patrones, los algoritmos eficientes de compilación, se han
desarrollado gracias al gran trabajo investigativo de los últimos años.
Todo lo anterior permite ubicar a la programación funcional como una importante
opción para el desarrollo de software que facilite hacer realidad los ideales de la
ingeniería de software como son: la reusabilidad, la modularidad, la mantenibilidad
y la corrección. En el presente artículo se pretende mostrar las ideas subyacentes
a la programación funcional, así como ilustrar las características que la hacen un
enfoque particular y novedoso de la programación. De igual manera, se hablará
brevemente de su historia desarrollo y perspectivas.
Una definición de programación funcional generalmente aceptada es la siguiente:
"El estilo de programación que enfatiza la evaluación de expresiones, antes que la
ejecución de comandos". La definición anterior es bastante amplia y tal vez
ambigua, pues no se precisa a qué se refiere el énfasis del cual habla. Esto refleja
la frontera difusa que existe entre lenguajes funcionales puros y lenguajes no
funcionales; en esta frontera se ubican lenguajes como LISP, SCHEME y ML, que
nadie dudaría en catalogar como funcionales a pesar de que tienen características
no puras como asignaciones y efectos laterales, a diferencia de los lenguajes
funcionales puros, los cuales desarrollan todos su cómputos exclusivamente a
través de la aplicación de funciones.
Un programa funcional está constituido enteramente por funciones; el programa
principal es una función que toma como argumento la entrada al programa y
genera la salida del programa como su resultado. Típicamente, la función principal
se define en términos de otras funciones, y éstas, a su vez, en término de más
funciones; esta cadena finaliza en funciones predefinidas o primitivas.
A simple vista, un programa en lenguaje C se ajustaría a la definición de
programa funcional (de hecho algunas personas consideran que el C es un
lenguaje funcional); sin embargo, la principal diferencia de los programas
funcionales puros respecto a los programas convencionales (imperativos) es que
los únicos elementos constructores en los primeros son la definición y la aplicación
de funciones, mientras que en los programas imperativos se utilizan, además,
variables, asignaciones ciclos iterativos, etcétera.
Parece muy restrictivo el hecho de no poder utilizar variables, ni asignaciones, ni
ciclos iterativos; sin embargo se ha demostrado matemáticamente que la
definición y la aplicación de funciones era suficiente para construir cualquier
función computable. (Gonzále)
3. SEGUNDO CONCEPTO DE
PROGRAMACIÓN FUNCIONAL.
Son aquellos lenguajes donde las variables no tienen estado no hay cambios en
éstas a lo largo del tiempo y son inmutables no pueden cambiarse los valores a
lo largo de la ejecución. Además los programas se estructuran
componiendo expresiones que se evalúan como funciones. Dentro de los
lenguajes funcionales tenemos LISP, SCHEME, CLOJURE, HASKELL, OCAML
Y STANDARD ML, entre otros. Estos lenguajes están diversidad de tipificación,
donde se encuentran lenguajes dinámicos, estáticos y estáticos fuertes.
En los lenguajes funcionales las instrucciones cíclicas como for, while y do-
while no existen. Todo se procesa usando recursividad y funciones de alto orden.
Esto se debe a los fundamentos matemáticos de la mayoría de los lenguajes
funcionales, principalmente con bases en el sistema formal diseñado por Alonzo
Church para definir cómputos y estudiar las aplicaciones de las funciones llamado
Cálculo Lambda. En este sistema formal se puede expresar recursividad en las
funciones, y entre otras cosas interesantes, se pueden expresar combinadores
funciones sin variables libres como el Combinador de Punto Fijo o Y-Combinator,
que expresa recursividad sin hacer llamadas recursivas. En el Cálculo Lambda
existen tres transformaciones esenciales, la conversión α, la reducción β y la
conversión η. En la conversión α se sustituyen los nombres de las variables para
dar mas claridad a la aplicación de las funciones, por ejemplo evitando duplicados
en sus nombres. En la reducción β se traza el llamado de las funciones
sustituyendo las funciones por sus expresiones resultantes. Finalmente en las
conversiones η se busca las equivalencias de trazado de funciones
sustituyéndolas por sus equivalentes. Estastransformaciones también pueden ser
aplicadas en los lenguajes funcionales — o en su mayoría — dando lugar
lenguajes que cuentan con una gran expresividad y consistencia.
Les pondré el clásico ejemplo del chiste geek del castigo “Debo poner atención en
clases”. La respuesta geek expresada en PHP está escrita a continuación. Donde
PHP es un lenguaje dinámico, no necesita declarar variables y es un lenguaje
orientado a objetos con raíces imperativas. Sus instrucciones son paso a paso, y
no constituyen una única expresión reducible.
Si usamos Haskell como ejemplo, que es un lenguaje funcional con tipificación
estática fuerte, requiere que las variables sean declaradas con un tipo — la
mayoría de las veces — y es muy expresivo, donde el siguiente ejemplo dice
repetir la cadena, tomar 500 elementos y con esa lista ejecutar la función
monádica putStrLn, que esta hecha para el Monad IO e imprime la el mensaje las
500 veces solicitada.
En Lisp sería similar, pero Lisp es de tipificación dinámica y
no necesita declarar variables, dando lugar a un programa
muy simple de una sola linea. Donde también tenemos
lenguajes como Clojure, que es un dialecto de Lisp y soporta
construcciones muy similares a las del ejemplo en Lisp,
dando lugar a programas expresivos y simples, pero que
corren sobre la máquina virtual de Java o JVM.
Actualmente los lenguajes orientados a objetos más comunes están integrando
características funcionales, como Java, que acaba de incluir funciones anonimas.
Pero también están los lenguajes que a lo largo de su historia han sido multi-
paradigma, como Python, e implementa características funcionales, procedurales
y orientadas a objetos. (Diaz, 2012)
4. CONCLUCION
Como bien en este presente trabajo de la programación funcional nos dice que es
un paradigma independiente ya que su creación fue debida a las necesidades de
los investigadores en el campo de la inteligencia artificial en el cual Como aspecto
práctico casi todos los lenguajes funcionales soportan el concepto de variable,
asignación y bucle.
5. BIBLIOGRAFIAS
Diaz, E. (11 de noviembre de 2012). Recuperado el 01 de octubre de 2015, de file:///F:/guadalupe%202.1/Qu%C3%A9%20es%20la%20Programaci%C3%B3n%20Funcional_%20-%20La%20Sombra%20de%20Dijkstra.html
Gonzále, F. A. (s.f.). universidad nacional de colombia. Recuperado el 02 de Octubre de 2015, de file:///C:/Users/CRESUD/Downloads/Dialnet-ProgramacionFuncional-4902462.pdf