Actividad No.1

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 13

Tecnológico Nacional de México, Campus Valladolid

Academia En Ing. En Sistemas Computacionales

Introducción.

Los lenguajes funcionales ofrecen al programador un buen número de recursos


expresivos que permiten resolver problemas complejos mediante programas
pequeños y robustos. Entre ellos cabe destacar: un sistema de tipos polimórficos
que permite definir una amplia variedad de estructuras de datos de uso genérico,
la posibilidad de definir funciones que aceptan otras funciones como argumentos y
devuelven funciones como resultado, facilidades para definir y manipular
estructuras de datos infinitas, un modelo computacional simple, claro y bien
fundamentado, etc. De no menor importancia es la posibilidad de razonar, de
forma sencilla, acerca de las propiedades de los programas: su corrección, su
eficacia, su comportamiento en ejecución. Esto permite optimizar las tareas de
implementación de los lenguajes funcionales.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

1) Definición de la programación funcional.

La programación funcional nos es más que un paradigma de programación, es


decir, es una forma en la cual podemos resolver diferentes problemáticas. En
programación funcional un programa es un conjunto de funciones
matemáticas que convierten unas entradas en unas salidas, sin ningún
estado interno y ningún efecto lateral. La programación funcional es un
paradigma declarativo. Nos enfocaremos en "qué" estamos haciendo y no en
"cómo" se está haciendo que sería el enfoque imperativo. Esto quiere decir que
nosotros expresaremos nuestra lógica sin describir controles de flujo; no usaremos
ciclos o condicionales.

Ejemplo:

2) Lenguajes de programación puros.


Lenguajes funcionales puros: es decir, aquellos que tratan su programa completo
como una función pura y manejan la mutabilidad únicamente mediante la
interacción con el tiempo de ejecución. Haskell, Mercury, Clean, Miranda

Haskell.

Haskell es un lenguaje de programación estandarizado multi-propósito,


funcionalmente puro, con evaluación no estricta y memorizada, y fuerte tipificación
estática. En Haskell, "una función es un ciudadano de primera clase" del lenguaje
de programación. Como lenguaje de programación funcional, el constructor de
controles primario es la función. El lenguaje tiene sus orígenes en las
observaciones de Haskell Curry y sus descendientes intelectuales.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

Ejemplo:

Mercury.

Mercury es un lenguaje de programación lógico-funcional, es decir, integra


"soluciones puras" y computación con información parcial. Mercury es un lenguaje
de programación lógica / funcional que combina la claridad y la expresividad de la
programación declarativa con funciones avanzadas de análisis estático y
detección de errores.

Clean.

Clean Code, o Código Limpio, es una filosofía de desarrollo de software que


consiste en aplicar técnicas simples que facilitan la escritura y lectura de un
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

código, volviéndolo más fácil de entender. El clean code no es un conjunto de


reglas estrictas, sino una serie de principios que ayudan a producir código intuitivo
y fácil de modificar.

Miranda.

Miranda se trata de un lenguaje de programación funcional sucesor de SASL y


KRC. El principal objetivo de este lenguaje era el desarrollar una versión comercial
de un lenguaje funcional:

 no-estricto.
 puramente funcional.

Consiste en un conjunto de declaraciones de ecuaciones recursivas y datos de


tipo algebraico. La palabra set es importante aquí: el orden de las ecuaciones es,
en general, irrelevante, y no es necesario definir una entidad inicial para su uso.

3) Programación funcional en lenguajes no funcionales.

Es posible utilizar un estilo de programación funcional en lenguajes que


tradicionalmente no se consideran lenguajes funcionales. Por ejemplo, tanto D y
Fortran95 se apoyan explícitamente en funciones puras. Funciones de primera
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

clase, se han añadido lentamente a los lenguajes principales. En Java, las clases
anónimas a veces pueden ser utilizados para simular clausuras. Sin embargo, las
clases anónimas no son siempre los reemplazos completos de las clausuras, ya
que tienen capacidades más limitadas. Por ejemplo, Java 8, incluye expresiones
lambda para reemplazar determinadas clases anónimas. Sin embargo, la
presencia de excepciones con comprobaciones en este lenguaje puede
desaconsejar el uso de programación funcional, ya que puede ser necesario para
capturar las excepciones que se deben controlar para después volverlas a lanzar
ellos (problema este que sin embargo no se produce en otros lenguajes sobre
JVM que no tienen excepciones comprobadas, como es Scala). Muchos patrones
de diseño orientado a objetos se pueden expresar en términos de programación
funcional, por ejemplo: el patrón de estrategia simplemente dicta el uso de una
función de orden superior, y el patrón de visitantes corresponde aproximadamente
a un catamorfismo, o doble también conocido como reducir, comprimir, o inyectar,
se refiere a una familia de funciones de orden superior que analiza una estructura
de datos recursiva y se recombinan con el uso de una operación de combinación.
Del mismo modo, la idea de los datos inmutables de la programación funcional se
incluye a menudo en lenguajes de programación imperativa, por ejemplo, la tupla
de Python, que es una matriz inmutable.

4) Usos en la industria.

La programación funcional es más popular en el ámbito académico que en


ámbitos industriales. Sin embargo se han empezado a usar importantes lenguajes
de programación funcionales en sistemas comerciales o industriales. Un ejemplo
de lenguaje de programación funcional usado en el ámbito industrial es Erlang, el
cual fue desarrollado para poner en práctica sistemas de tolerancia a fallos en las
telecomunicaciones. Importantes empresas como WhatsApp, Facebook, o T-
Mobile optaron por Erlang como lenguaje en alguno de sus desarrollos. Otro
ejemplo de uso de los lenguajes de programación funcionales en la industria es el
caso del uso del Scheme de Lisp, que fue usado como base en el desarrollo de
aplicaciones para los primeros ordenadores de la firma Apple Macintosh. De
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

hecho, hoy en día, está siendo usado para desarrollo de sistemas de simulación y
de control de telescopio. Haskell, es un ejemplo de lenguaje que se creó con
propósito de lenguaje de investigación pero que se ha usado para el desarrollo de
sistemas aeroespaciales, programación web y diseño de hardware. Otros
lenguajes de programación funcionales han sido usados en ámbitos comerciales y
financieros.

5) Funciones puras.

Las funciones puramente funcionales (o expresiones) no tienen efectos


secundarios (memoria o E/S). Esto significa que las funciones puras tienen varias
propiedades útiles, muchas de las cuales pueden ser utilizadas para optimizar el
código:

Si no se utiliza el resultado de una expresión pura, se puede eliminar sin afectar a


otras expresiones.

Si una función pura se llama con parámetros que no causan efectos secundarios,
el resultado es constante con respecto a la lista de parámetros (a veces llamada
transparencia referencial), es decir, si la función pura se llama de nuevo con los
mismos parámetros, el mismo resultado será devuelto (esto puede habilitar las
optimizaciones de almacenamiento en caché).

Si no hay una dependencia de datos entre dos expresiones puras, entonces su


orden puede ser invertido, o pueden llevarse a cabo en paralelo y que no pueda
interferir con los otros.

Si el lenguaje no permite efectos secundarios, entonces cualquier estrategia de


evaluación se puede utilizar, lo que da la libertad al compilador para reordenar o
combinar la evaluación de expresiones en un programa (por ejemplo, usando la
poda).

La mayoría de los compiladores de lenguajes imperativos detectan funciones


puras automáticamente y realizan la eliminación de subexpresiones comunes. Sin
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

embargo, no siempre es posible detectarlo en bibliotecas pre-compiladas, porque


por norma general no dan esta información. Esto provoca que no se puedan
realizar optimizaciones que podrían aplicar a dichas funciones externas. Algunos
compiladores, como gcc, añaden palabras claves adicionales para que el
programador marque explícitamente como puras aquellas funciones externas que
proceda, de modo que se le apliquen las optimizaciones pertinentes. Fortran 95
también permite declarar funciones "puras".

6) Tipos en programación funcional.

La programación funcional es un paradigma de programación declarativa basado


en el uso de verdaderas funciones matemáticas. En este estilo de programación
las funciones son ciudadanas de primera clase, porque sus expresiones pueden
ser asignadas a variables como se haría con cualquier otro valor; además de que
pueden crearse funciones de orden superior.

 LISP.

El Lisp (o LISP) es una familia de lenguajes de programación de computadora de


tipo multiparadigma con una larga historia y una sintaxis completamente entre
paréntesis. Lenguaje de programación diseñado para el tratamiento de datos no
numéricos. Se emplea mucho en la investigación de inteligencia artificial.

 ML.

ML se define como un lenguaje funcional impuro, porque a diferencia de otros


lenguajes funcionales, como Haskell, permite una programación imperativa y, por
lo tanto, también efectos secundarios. Las principales características de ML son
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

las siguientes: evaluación de expresiones con llamada por valor, la gestión


automática de memoria a través de un mecanismo de recolección de basura,
polimorfismo paramétrico, tipificación estática, inferencia de tipos, tipos de datos,
algebraica, coincidencia de patrones y manejo de excepciones.

 Haskell.

Haskell es un lenguaje de programación estandarizado multi-propósito,


funcionalmente puro, con evaluación no estricta y memorizada, y fuerte tipificación
estática. En Haskell, "una función es un ciudadano de primera clase" del lenguaje
de programación. Como lenguaje de programación funcional, el constructor de
controles primario es la función. El lenguaje tiene sus orígenes en las
observaciones de Haskell Curry y sus descendientes intelectuales.

 OCaml.

Como los demás lenguajes funcionales emplea un recolector de basura que


permite en muchos casos desentenderse del manejo de memoria dinámica.Cuenta
con un sistema de tipos fuerte, con un derivador de tipos que facilita el chequeo
estático de programas sin requerir del programador tiempo en declaración explicita
de tipos. Además de tipos básicos (enteros, flotantes, booleanos, caracteres y
cadenas) ofrece diversas formas de construir nuevos tipos como tuplas, arreglos,
listas, registros, conjuntos, streams y facilidades para definir tipos recursivos,
polimórficos y paramétricos.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

 F#.

F# es un lenguaje fuertemente tipado que utiliza inferencia de tipos. Como


resultado, los tipos no necesitan estar declarados explícitamente por el
programador; estos serán deducidos por el compilador durante el proceso de
compilación. Sin embargo, F# también permite la declaración explícita de tipos de
datos. Por ser un lenguaje .NET, F# soporta los objetos y tipos de .NET; F#
permite al programador programar de una manera que se asemeja más a como
pensamos.

 Erlang.

Es un lenguaje de programación concurrente (u orientado a la concurrencia) y un


sistema de ejecución que incluye una máquina virtual (BEAM) y bibliotecas (OTP).
Erlang es un lenguaje funcional, con evaluación estricta, asignación única, y tipado
dinámico. Fue diseñado en la compañía Ericsson para realizar aplicaciones
distribuidas, tolerantes de fallos, soft-real-time y de funcionamiento ininterrumpido.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

 Clojure.

Clojure es un lenguaje de programación de propósito general dialecto de Lisp.


Hace un énfasis especial en el paradigma funcional, con el objetivo de eliminar la
complejidad asociada a la programación concurrente. Clojure puede ser ejecutado
sobre la Máquina Virtual de Java y la máquina virtual de la plataforma.

7) Recursión.

Un objeto se denomina inmutable cuando no se puede modificar de ninguna forma


después de su creación. Los objetos inmutables son importantes para evitar que
se alteren, y por tanto usarlos solamente en su ámbito (dentro de una función).
Para hacer compatibles los bucles con este concepto, en la programación
funcional se usa la recursión. Ocurre cuando una función se llama a sí misma,
creando de esta manera un bucle en el que los valores antiguos no son
modificados. Cada llamada recursiva es por tanto independiente de las anteriores.

8) Funciones de orden superior.


Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

Funciones de orden superior son funciones que pueden tomar otras funciones
como argumentos o devolverlos como resultados. En cálculo, un ejemplo de una
función de orden superior es el operador diferencial d / dx, que devuelve la
derivada de una función f. Las funciones de orden superior están estrechamente
relacionadas con las funciones de primera clase en las cuales las funciones de
orden superior y las funciones de primera clase pueden recibir como argumentos y
resultados otras funciones. La distinción entre los dos es sutil: "de orden superior",
describe un concepto matemático de funciones que operan sobre otras funciones,
mientras que la "primera clase" es un término informático que describe las
entidades del lenguaje de programación que no tienen ninguna restricción de su
utilización. Las funciones de orden superior permiten la aplicación parcial, una
técnica en la que se aplica una función a sus argumentos uno a la vez, con cada
aplicación devolver una nueva función que acepta el siguiente argumento. Esto le
permite a uno expresar, por ejemplo, la función sucesora como el operador de
suma aplicada parcialmente al número natural uno.

9) Funciones lambdas.

En el ámbito de la programación, una expresión lambda, también denominada


función lambda, función literal o función anónima, es una subrutina definida que no
está enlazada a un identificador. Las expresiones lambda a menudo son
argumentos que se pasan a funciones de orden superior, o se usan para construir
el resultado de una función de orden superior que necesita devolver una función.

Las expresiones lambda suelen utilizarse para lo siguiente:

 Como argumentos que son pasados a otras funciones de orden superior.


 Para construir el resultado de una función de orden superior que necesita
retornar una función.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

Si la función lambda sólo se utiliza una vez es utilizada una vez o un número
limitado de veces, una expresión lambda puede ser sintácticamente más simple
que una función nombrada. Las funciones lambda son muy comunes en la
programación funcional y otros lenguajes con funciones de primera clase, donde
cumplen el mismo papel para el tipo de función como literales para otros tipos de
datos.

10)Evaluación perezosa.

La evaluación perezosa o llamada por necesidad es una estrategia de evaluación


que retrasa el cálculo de una expresión hasta que su valor sea necesario, y que
también evita repetir la evaluación en caso de ser necesaria en posteriores
ocasiones. Esta compartición del cálculo puede reducir el tiempo de ejecución de
ciertas funciones de forma exponencial, comparado con otros tipos de evaluación.

Los beneficios de la evaluación perezosa son:

 El incremento en el rendimiento al evitar cálculos innecesarios, y en tratar


condiciones de error al evaluar expresiones compuestas.
 La capacidad de construir estructuras de datos potencialmente infinitas.
 La capacidad de definir estructuras de control como abstracciones, en lugar
de operaciones primitivas.

Este método de evaluación es comúnmente implementado encapsulando cada


expresión en una función que, cuando sea computada, devolverá el valor deseado
de la expresión. De esta manera, cuando el resultado sea necesitado, la función
creada será ejecutada para conseguirlo.
Tecnológico Nacional de México, Campus Valladolid
Academia En Ing. En Sistemas Computacionales

La evaluación perezosa puede también reducir el consumo de memoria de una


aplicación, ya que los valores se crean solo cuando se necesitan. Sin embargo, es
difícil de combinar con las operaciones típicas de programación imperativa, como
el manejo de excepciones o las operaciones de entrada/salida, porque el orden de
las operaciones puede quedar indeterminado.

También podría gustarte