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 @@

EJEMPLOS

HOLA MUNDO

-

Haskell

-

Scala

-

Lisp

-

Ocaml

+
Clojure

+
Haskell

+
Scala

+
Lisp

+
Ocaml

+
Scheme

+
Erlang

@@ -64,15 +67,16 @@

HOLA MUNDO

FIBONACCI

-

Clojure

-

Erlang

-

Haskell

-

JavaScript

-

Lisp

-

Python

-

R

-

Ocaml

-

Scala

+
Clojure

+
Haskell

+
Scala

+
Lisp

+
Ocaml

+
Scheme

+
Erlang

+
JavaScript

+
Python

+
R

@@ -82,53 +86,60 @@

FIBONACCI

Ejemplo en Kotlin

-

Kotlin

+
Kotlin

Funciones puras

-

Ruby

+
Clojure

+
Haskell

+
Scala

+
Lisp

+
Ocaml

+
Scheme

+
Erlang

+
Ruby

Funciones anónimas

-

Python

-

R

+
Python

+
R

Funciones de orden superior

-

Ruby

+
Ruby

Currying

-

Ruby

+
Ruby



-

R

+
R

Procs

-

Ruby

+
Ruby

Functor lista

-

Python

+
Python


@@ -136,35 +147,35 @@

Functor lista

Functor función

-

Python

+
Python

Caso de uso

-

Python

+
Python

Effect tracking

-

Python

+
Python

Operadores como funciones

-

R

+
R

Vectorización

-

R

+
R


diff --git a/progfun/funcional_teoria/images/RLogo.png b/progfun/funcional_teoria/images/RLogo.png new file mode 100644 index 00000000..9b2826a9 Binary files /dev/null and b/progfun/funcional_teoria/images/RLogo.png differ diff --git a/progfun/funcional_teoria/images/erlangLogo.png b/progfun/funcional_teoria/images/erlangLogo.png new file mode 100644 index 00000000..6c5e2cbd Binary files /dev/null and b/progfun/funcional_teoria/images/erlangLogo.png differ diff --git a/progfun/funcional_teoria/images/kotlinLogo.png b/progfun/funcional_teoria/images/kotlinLogo.png new file mode 100644 index 00000000..efb31382 Binary files /dev/null and b/progfun/funcional_teoria/images/kotlinLogo.png differ diff --git a/progfun/funcional_teoria/images/lispLogo.svg.png b/progfun/funcional_teoria/images/lispLogo.svg.png new file mode 100644 index 00000000..ccdf3401 Binary files /dev/null and b/progfun/funcional_teoria/images/lispLogo.svg.png differ diff --git a/progfun/funcional_teoria/images/pythonLogo.svg.png b/progfun/funcional_teoria/images/pythonLogo.svg.png new file mode 100644 index 00000000..5a7c3110 Binary files /dev/null and b/progfun/funcional_teoria/images/pythonLogo.svg.png differ diff --git a/progfun/funcional_teoria/images/rubyLogo.svg.png b/progfun/funcional_teoria/images/rubyLogo.svg.png new file mode 100644 index 00000000..1093797e Binary files /dev/null and b/progfun/funcional_teoria/images/rubyLogo.svg.png differ diff --git a/progfun/funcional_teoria/images/scalaLogo.png b/progfun/funcional_teoria/images/scalaLogo.png new file mode 100644 index 00000000..8280fd4b Binary files /dev/null and b/progfun/funcional_teoria/images/scalaLogo.png differ diff --git a/progfun/funcional_teoria/index.html b/progfun/funcional_teoria/index.html index eab4059e..fc00b86a 100644 --- a/progfun/funcional_teoria/index.html +++ b/progfun/funcional_teoria/index.html @@ -639,17 +639,42 @@

Seguridad

Paralelismo

- 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 @@

Lenguajes de programación


-
+

SCALA

Es un lenguaje de programación multi-paradigma diseñado para @@ -774,13 +799,65 @@

Haskell

+
+
+ Erlang + +
+
+

ERLANG

+

+ 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

+

+ 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. +

+
+
+ Lisp + +
+
Photo +
-
+

CLOJURE

Es un lenguaje de programación de propósito general que maneja @@ -819,7 +896,7 @@

CLOJURE

-
+

OCaml

Objective CAML, su etimología proviene de las siglas Objective @@ -841,6 +918,7 @@

OCaml

Ocaml +