diff --git a/progfun/funcional_teoria/css/styles.css b/progfun/funcional_teoria/css/styles.css index 4f01ddde..f5de3b9d 100644 --- a/progfun/funcional_teoria/css/styles.css +++ b/progfun/funcional_teoria/css/styles.css @@ -66,4 +66,35 @@ li ul li { display: flex; width: min(900px, 100%); margin: 0 auto; +} + +.vertical-center { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; +} + +.container-logo { + display: inline-block; + font-size: large; + margin: 1em; + padding: 0em; +} + +.logo-example{ + max-width: 2.5%; + height: auto; + display: inline-block; + vertical-align: middle; +} + +.logo-example img{ + max-width: 100%; + height: auto; + display: inline-block; + vertical-align: middle; + margin-top: 1em ; + margin-bottom: 1em ; } \ No newline at end of file diff --git a/progfun/funcional_teoria/examples.html b/progfun/funcional_teoria/examples.html index 7c410391..d4595b88 100644 --- a/progfun/funcional_teoria/examples.html +++ b/progfun/funcional_teoria/examples.html @@ -52,10 +52,13 @@
Haskell
-Scala
-Lisp
-Ocaml
+Clojure
+Haskell
+Scala
+Lisp
+Ocaml
+Scheme
+Erlang
Clojure
-Erlang
-Haskell
-JavaScript
-Lisp
-Python
-R
-Ocaml
-Scala
+Clojure
+Haskell
+Scala
+Lisp
+Ocaml
+Scheme
+Erlang
+JavaScript
+Python
+R
Kotlin
+Kotlin
Ruby
+Clojure
+Haskell
+Scala
+Lisp
+Ocaml
+Scheme
+Erlang
+Ruby
Python
-R
+Python
+R
Ruby
+Ruby
Ruby
+Ruby
R
+R
Ruby
+Ruby
Python
+Python
Python
+Python
Python
+Python
Python
+Python
R
+R
R
+R
- Dado que en la programación funcional no existe un estado global no es necesario implementar - las técnicas de paralelismo como - (Multexes, Semáforos, Locks) por lo cual se pueden realizar funciones en paralelo siempre que - estas cumplan con ciertas reglas al - momento de su ejecución + La programación funcional se caracteriza por la ausencia de cambios en estados globales, lo que + permite "ignorar" el tiempo en un sentido particular. Esto significa que podemos dejar de + preocuparnos por el momento en que las funciones acceden a una variable compartida, lo que podría + dar lugar a resultados variables. Al evitar la mutabilidad de las variables, eliminamos la + necesidad de rastrear cuándo y cómo se accede a ellas, obteniendo respuestas consistentes + según la lógica de programación. En el contexto de la programación paralela y concurrente, + estas preocupaciones suelen requerir estructuras y técnicas de sincronización complejas, + como cerraduras, semáforos, funciones y variables atómicas, variables de condición, + monitores, etc.
- Por otro lado, la concurrencia es mucho más segura. Las funciones puras son seguras para hilos (thread-safe), es decir, siempre - garantizan que nunca va a suceder que dos procesos concurrentes intenten acceder a los mismos datos al mismo - tiempo. Esto se conoce como condiciones de carrera y es uno de los bugs más difíciles de solucionar; dado que las - funciones puras nunca comparten estados con las demás secciones de un programa, nunca tienen condiciones de carrera. + Sin embargo, la programación funcional se convierte en una solución eficaz para lograr el + paralelismo al proporcionar un enfoque más limpio y claro. A pesar de sus limitaciones, la + programación funcional se muestra como una herramienta poderosa para la concurrencia, pues + ofrece ventajas notables, como la programación declarativa, que se basa en expresar lo que + se quiere hacer en lugar de cómo hacerlo. Esto permite a los sistemas de concurrencia tomar + decisiones más eficientes sobre cómo ejecutar tareas en paralelo, ya que se pueden reorganizar + y optimizar las operaciones sin cambiar el resultado final. La evaluación perezosa, otra + ventaja, significa que las expresiones no se evalúan hasta que sea necesario, lo que mejora la + eficiencia en situaciones de concurrencia al evitar cálculos innecesarios. +
++ La programación funcional, además de promover la composición de funciones, lo que facilita la + construcción de sistemas concurrentes a partir de componentes pequeños y reutilizables, sobresale + en la inferencia de dependencias. En un paradigma funcional, las dependencias entre funciones + se vuelven más claras y explícitas, lo que simplifica la identificación de tareas que pueden + ejecutarse en paralelo sin preocupaciones por problemas de dependencias. Este enfoque funcional + también aboga por el aislamiento de estado, lo que implica que las secciones del programa no + comparten datos mutables. Esto no solo reduce la probabilidad de condiciones de carrera y + otros problemas comunes en la concurrencia, sino que también mejora la seguridad general. Las + funciones puras, inherentes a la programación funcional, garantizan que múltiples procesos + concurrentes nunca intenten acceder simultáneamente a los mismos datos, eliminando así una de las + preocupaciones más desafiantes en la concurrencia, conocida como condiciones de carrera. En + resumen, la programación funcional ofrece un enfoque altamente efectivo para abordar la + concurrencia al eliminar las inquietudes sobre la compartición de estados y al permitir un diseño + más seguro, eficiente y mantenible de sistemas concurrentes.
@@ -670,7 +695,7 @@Es un lenguaje de programación multi-paradigma diseñado para @@ -774,13 +799,65 @@
+ Erlang es un lenguaje de programación altamente funcional y + concurrente, diseñado para construir sistemas robustos y escalables + en entornos de telecomunicaciones y aplicaciones distribuidas. + Sus propiedades funcionales se centran en la inmutabilidad de datos, la + ausencia de efectos secundarios y la concurrencia basada en actores. + En Erlang, los procesos son entidades ligeras que se comunican a + través de mensajes, permitiendo una alta concurrencia y una + arquitectura resistente a fallos. Además, Erlang promueve el uso de + patrones funcionales, como la recursión y el patrón "head-tail," lo que + hace que el código sea más claro y mantenible. Su énfasis en la + tolerancia a fallos y la escalabilidad lo convierte en una herramienta + poderosa para aplicaciones distribuidas y sistemas en tiempo real. +
++ Lisp, acrónimo de "List Processing," es un lenguaje de programación de + alto nivel que se destaca por su rica historia en el ámbito de la + programación funcional. Una de las características distintivas de Lisp + es su representación de datos y código en forma de listas, lo que lo + convierte en un lenguaje muy flexible y expresivo. Proporciona un + ambiente propicio para la programación funcional debido a su énfasis + en funciones de orden superior, donde las funciones pueden tratarse + como datos y pasarse como argumentos. Lisp también promueve la + recursión como una técnica fundamental y fomenta la creación de + funciones puras que evitan efectos secundarios. Su enfoque en la + inmutabilidad de datos y la facilidad de creación de nuevas funciones + lo convierte en un lenguaje adecuado para la construcción de software + confiable y mantenible. Lisp ha influido en el desarrollo de otros + lenguajes funcionales y sigue siendo relevante en campos como la + inteligencia artificial y la programación simbólica. +
+Es un lenguaje de programación de propósito general que maneja @@ -819,7 +896,7 @@
Objective CAML, su etimología proviene de las siglas Objective @@ -841,6 +918,7 @@