Está en la página 1de 12

Tecnológico nacional de México.

Instituto Tecnológico de Tapachula

Carrera: Ingeniería en Sistemas Computacionales.

Nombre de la Materia: Programación logica y funcional

Tema 2: Modelo de Programación Funcional. (Investigation de


Programacion funcional).

Nombre del Catedrático: Marilin De León Morga.

Nombre del Alumno: Sánchez Lucas Hellen Michel.

Semestre: 8vo. Grupo: “A”

Tapachula Chiapas a 19 de octubre del 2020.

2
INDICE
RESUMEN ......................................................................................................................................... 2
INTRODUCCIÓN .............................................................................................................................. 3
PROGRAMACIÓN FUNCIONAL .................................................................................................. 4
Características de la programación funcional ................................................................... 4
Otras características del paradigma funcional son las siguientes: ......................... 5
LENGUAJES DE PROGRAMACIÓN ........................................................................................... 5
HASKELL BROOKS CURRY ........................................................................................................ 6
HASKELL ...................................................................................................................................... 6
TIPOS DE DATOS ........................................................................................................................... 7
LISP .................................................................................................................................................... 7
SCHEME ............................................................................................................................................ 8
CONCLUSIÓN .................................................................................................................................. 9
BIBLIOGRAFÍA. ............................................................................................................................. 10

1
RESUMEN

La base teórica de la programación imperativa fue dada (en Inglaterra) por Alan
Turing en los años treinta. También la teoría de funciones como modelo de
computación proviene de los años veinte y treinta. Los fundadores son, entre otros,
M. Schonfinkel (en Alemania y Rusia), Haskell Curry (en Inglaterra) y Alonzo Church
(en los Estados Unidos). 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. 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 y Scheme
(una adaptación de Lisp).

A la larga, cada investigador se dedicó a desarrollar su propio lenguaje. Para


detener este crecimiento incontrolado, un grupo de investigadores notables concibió
un lenguaje que incluía todas las mejores cualidades de los diferentes lenguajes.
Este lenguaje se llama Haskell. Las primeras implementaciones de Haskell fueron
hechas a comienzos de los años noventa. Este lenguaje es bastante ambicioso y
de difícil implementación. El lenguaje Gofer es un lenguaje como Haskell, pero un
poco más simple. Se usa para investigaciones teóricas y para metas educativas.
Los lenguajes ML y Scheme tienen también muchos seguidores. Estos lenguajes
han hecho algunas concesiones en la dirección de los lenguajes imperativos. Son
de menos utilidad para mostrar lo que es un lenguaje funcional propio.

2
INTRODUCCIÓN

Antes de entender de un solo golpe el concepto de la programación funcional,


considero que previamente se debe de entender que es la programación funcional
en sí. Los lenguajes habituales que generalmente dominamos se basan, en mayor
o menor medida, en realizar una serie de pasos, o dicho de otra forma en seguir un
algoritmo, esto es en definir lo que las cosas hacen; esto es a lo que se le conoce
como programación imperativa. En programación funcional las cosas son muy
diferentes, aquí nosotros definiremos más bien lo que las cosas son. El propio
nombre nos da una pista o idea de que la característica fundamental de este
paradigma: se basa en un concepto de función algo diferente al que estamos
acostumbrados, más cercano a los conceptos matemáticos.

La programación funcional aun siendo fácil de entender y mantener, suele ser más
difícil escribir un programa funcionalmente, sobre todo para los que estamos
acostumbrados a la programación imperativa. La gran variedad de conceptos
complejos sobre todo matemáticos a tener en cuenta hace difícil dominar el lenguaje
y producir buen código.

3
PROGRAMACIÓN FUNCIONAL

Los lenguajes funcionales utilizan un modelo computacional simple similar al de una


calculadora. Las funciones existen en cualquier lenguaje de programación estándar.
Sin embargo, los enfoques funcionales del desarrollo de software cuentan con
funciones de una clase especial: Un programa de programación funcional consta de
llamadas de función concatenadas en las que cada parte del programa se interpreta
como una función. En este sentido, las funciones dentro de la programación
funcional pueden adoptar distintas “estructuras”. Por ejemplo, se pueden vincular
entre sí como datos o se pueden utilizar en forma de parámetros. Asimismo, se
pueden utilizar como resultados de función. En contraposición, el paradigma se
ocupa de que no haya asignaciones independientes de valores. Los subtipos de la
programación declarativa son muy importantes para la informática en general y al
mismo tiempo cuentan con aplicaciones muy versátiles. El tratamiento especial de
funciones permite a los programadores que trabajan de forma funcional componer
y aplicar nuevas normas de cálculo de gran alcance a partir de funciones.

Características de la programación funcional


• La característica principal de la programación funcional es que los cálculos
se ven como una función matemática que hacen corresponder entradas y
salidas.
• No hay noción de posición de memoria y, por tanto, necesidad de una
instrucción de asignación.
• Los bucles se modelan a través de la recursividad ya que no hay manera de
incrementar o disminuir el valor de una variable.
• Como aspecto práctico casi todos los lenguajes funcionales soportan el
concepto de variable, asignación y bucle.
• Estos elementos no forman parte del modelo funcional “puro”.

4
Otras características del paradigma funcional son las siguientes:
▪ Recursión
▪ Funciones como tipos de datos primitivos
▪ Uso de listas

LENGUAJES DE PROGRAMACIÓN

Actualmente contamos con una gran cantidad de lenguajes en donde podemos


hacer uso de la programación funcional, por ejemplo:
• Java

• PHP

• Ruby

• Python

• Elixir

• Kotling

• Haskell

• Erlang

Muchos de estos lenguajes no están cien por ciento enfocados en la programación


funcional, lo cual no es malo, de hecho, estos nos permiten hacer una transición de
un paradigma a otro, comúnmente de la programación orientada a objetos ha
programación funcional.

5
HASKELL BROOKS CURRY

Experto en lógica simbólica, trabajó en el primer ordenador electrónico llamado


ENIAC (Electronic Numerical Integrator and Computer) durante Segunda Guerra
Mundial. Trabajó en los 50 en los fundamentos de la lógica combinatoria y los aplicó
en Mitre Corporation Curry Chip en 1986 un innovador elemento hardware basado
en los conceptos de combinatoria de Curry.

HASKELL

Haskell es un lenguaje funcional puro, no es un lenguaje muy rápido, pero se prioriza


el tiempo del programador sobre el tiempo de computación.

• Haskell es un lenguaje de programación con tipos polimórficos,


con evaluación perezoso (lazy), y puramente funcional, muy
diferente a otros lenguajes imperativos.
• El lenguaje toma el nombre de Haskell Brooks Curry (1900-1982 Millis,
Massachusetts, USA), cuyos trabajos en lógica matemática sirvieron como
base a los lenguajes funcionales.
• Haskell está basado en el cálculo lambda.

6
TIPOS DE DATOS
El sistema Haskell cuenta con una serie de tipos primitivos predefinidos. Los
más importantes son:
Char indica el conjunto de caracteres con el formato’ a’,’ A’, ’1’,’\ n’, ...
Bool indica valores booleanos. Pueden ser True o False
Int indica enteros con l´ımite. Por ejemplo 123, −456, ...
Integer indica enteros sin l´ımite. Por ejemplo 123123123123, −123456789, ...
Float indica n´umeros en coma flotante. Por ejemplo 12.45, 12e3, ...
() indica el tipo nulo que solamente incluye el valor ()

LISP
▪ Lisp es el primer lenguaje de programación de alto nivel basado en el
paradigma funcional
▪ Creado en 1958 por John McCarthy
▪ Lisp es un lenguaje revolucionario e introduce nuevos conceptos de
programación: funciones como objetos primitivos, funciones de orden
superior, polimorfismo, listas, recursión, símbolos, homogeneidad de datos
y programas, bucle REPL “read-eval-print”
▪ La herencia del Lisp llega a lenguajes derivados de él (Scheme, Golden
Common Lisp) y a nuevos lenguajes de paradigmas no estrictamente
funcionales, como C#, Python, Ruby, Objective-C o Scala

En Lisp (y en Scheme) existen instrucciones que se salen del paradigma funcional


puro y permiten estado local y efectos laterales (programación imperativa). Por ello
son lenguajes en los que es posible programar de forma imperativa, no funcional.
Nosotros no vamos a utilizar esas instrucciones en esta primera parte de la
asignatura, escribiendo siempre código funcional.

7
Lisp se diseñó con el objetivo de ser un lenguaje de alto nivel capaz de resolver
problemas prácticos de Inteligencia Artificial, no con la idea de ser un lenguaje
formal basado un único modelo de computación.

SCHEME

En el seminario de Scheme hemos visto un conjunto de primitivas que podemos


utilizar en Scheme.
Podemos clasificar las primitivas en funciones y formas especiales. Las funciones
se evalúan usando el modelo de sustitución aplicativo ya visto:
▪ Primero se evalúan los argumentos y después se sustituye la llamada a la
función por su cuerpo y se vuelve a evaluar la expresión resultante.
▪ Las expresiones siempre se evalúan desde los paréntesis interiores a los
exteriores. Las formas especiales son expresiones primitivas de Scheme que
tienen una forma de evaluarse propia, distinta de las funciones.
En Scheme:
➢ Una expresión no se evalúa de inmediato, la evaluación se pospone hasta
el momento que sea necesaria.
➢ Scheme permite usar evaluación estricta o perezosa, pero esta última debe
programarse de manera explícita:

➢ El valor de una promesa es recordado, de tal forma que si force es llamado


nuevamente, se retorna el valor previamente capturado.
➢ Útil para trabajar con estructuras de datos infinitas.
➢ Permite “pegar” programas de una forma completamente distinta.

8
CONCLUSIÓN

La programación funcional nos permitirá desarrollar software mucho más legible y


fácil de testear, nos concentramos en qué estamos haciendo y no en cómo se está
haciendo.
la programación funcional es un paradigma de programación muy poderoso, que
nos permite pensar de una forma completamente diferente cuando tenemos que
resolver un problema, más parecido a la lógica y matemática de alto nivel, que a las
abstracciones artificiales de la máquina de Von Neumann. Digo que se debería
enseñar en los primeros años de las universidades, y que nos abre definitivamente
un camino para mejorar la Ingeniería del Software, ya que sus programas carecen
de efectos colaterales, y otros desafortunados productos de la arquitectura
tradicional de las computadoras, siendo sencillamente evaluaciones. Sin embargo,
queda mucho todavía por recorrer para que este tipo de lenguajes sea de utilización
en proyectos cotidianos, pero creo que un primer paso es la enseñanza de este
paradigma. Hay experiencias variadas en este sentido, inclusive algunas en nuestro
país (Szpiniak 1998), y en los ámbitos académicos de otros países (Chakravarty
2004, Thompson 1997, FDPE 2008), por lo que creo vale la pena su promoción.

9
BIBLIOGRAFÍA.
• Omar Ivan Trejos Programación funcional con raket 2007 ra-ma
• Jose A. Alfonso jimenez Programación funcional 2011-2012 Universidad de
Sevilla.
• B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. I
Cap. 1: Getting Started.
• B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell.
Thompson, 2004. I Cap. 1: Programación funcional.
• S. Thompson. Haskell: The Craft of Functional Programming, Second Edition.
Addison-Wesley, 1999. I Cap. 1: Introducing functional programming.
• Backus, J. Can programming be liberated from the von Neumann style? A
functional style and its algebra of programs, Communications of the ACM,
August 1978, Vol 21 (8).

10

También podría gustarte