programación lógica funcional

13

Click here to load reader

description

concepto de programación funcional

Transcript of programación lógica funcional

Page 1: 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

Page 2: programación lógica funcional

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

Page 3: programación lógica funcional

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

Page 4: programación lógica funcional

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

Page 5: programación lógica funcional

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

Page 6: programación lógica funcional

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

Page 7: programación lógica funcional

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)

Page 8: programación lógica funcional

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.

Page 9: programación lógica funcional

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

Page 10: programación lógica funcional