0% encontró este documento útil (0 votos)
36 vistas7 páginas

Lógica

Cargado por

Lupita Muñoz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas7 páginas

Lógica

Cargado por

Lupita Muñoz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Algunas características de la lógica de programación son:

Se basa en la organización y planificación de instrucciones en un algoritmo.

Utiliza estructuras de control como bucles, declaraciones condicionales y funciones.

Es especialmente importante en áreas como la inteligencia artificial y el aprendizaje


automático.

Para mejorar la lógica de programación se puede:

Practicar la resolución de problemas.

Estudiar los fundamentos de la lógica matemática.

Aprender sobre estructuras de datos y algoritmos.

Programación Funcional

En informática, 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.

La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal


desarrollado en los años 1930 para investigar la naturaleza de las funciones, la
naturaleza de la computabilidad y su relación con la recursión. Los lenguajes
funcionales priorizan el uso de recursividad y aplicación de funciones de orden
superior para resolver problemas que en otros lenguajes se resolverían mediante
estructuras de control (por ejemplo, ciclos). Algunos lenguajes funcionales también
buscan eliminar la mutabilidad o efectos secundarios; en contraste con la
programación imperativa, que se basa en los cambios de estado mediante la
mutación de variables. Esto significa que, en programación funcional pura, dos o más
expresiones sintácticas idénticas (por ejemplo, dos llamadas a rutinas o dos
evaluaciones) siempre devolverán el mismo resultado. Es decir, se tiene
transparencia referencial. Lo anterior también puede ser aprovechado para diseñar
estrategias de evaluación que eviten repetir el cómputo de expresiones antes vistas, o
para evaluar distintas ramas de un programa en paralelo sin mayor preocupación.

Los lenguajes de programación funcional, especialmente los puramente funcionales,


han sido enfatizados en el ambiente académico y no tanto en el desarrollo comercial
o industrial. Sin embargo, lenguajes de programación funcional como Lisp (Scheme,
Common Lisp, etc.), Erlang, Rust, Objective Caml, Scala, F#, Clojure, Racket,
Wolfram Language[2] y Haskell, también han sido utilizados en aplicaciones
comerciales e industriales. También es utilizada en la industria a través de lenguajes
de dominio específico como R (estadística), Mathematica (cómputo simbólico), J y K
(análisis financiero). Los lenguajes de uso específico usados comúnmente como SQL
y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al
procesar valores mutables. Las hojas de cálculo también pueden ser consideradas
lenguajes de programación funcional.

Otros lenguajes de programación no están diseñados específicamente para seguir un


estilo funcional, sin embargo lo ofrecen como alternativa. Por ejemplo, Perl,
JavaScript y Python fueron diseñados con capacidades de programación funcional,
además de incorporar otros paradigmas. Versiones recientes de lenguajes
originalmente sin capacidades funcionales, como C++ y Java, han ido incorporando
algunos conceptos de la programación funcional.

Claro, aquí te dejo el texto completo, con la introducción y los temas solicitados:

Introducción a la Programación Funcional

La programación funcional es un paradigma de programación que se centra en el uso


de funciones puras, la inmutabilidad de los datos y la ausencia de efectos
secundarios. A diferencia de la programación orientada a objetos o la programación
imperativa, la programación funcional trata las funciones como ciudadanos de
primera clase. Esto significa que las funciones pueden ser pasadas como
argumentos, retornadas como valores y almacenadas en estructuras de datos, lo que
proporciona un enfoque declarativo a la programación.

El objetivo principal de la programación funcional es escribir software más


predecible, modular y fácil de mantener, evitando la mutación del estado. Esto lo
hace ideal para aplicaciones en entornos concurrentes, paralelos y de gran escala. A
continuación, exploramos algunos de los conceptos y estructuras clave en este
paradigma.

1. Índice

En la programación imperativa, los índices son comunes para acceder a elementos


específicos dentro de una estructura de datos, como listas o arreglos. Sin embargo,
en la programación funcional, se tiende a evitar el acceso directo mediante índices
para mantener la inmutabilidad y asegurar un código más robusto.

En lugar de usar índices explícitos, la programación funcional utiliza funciones de alto


nivel como map, filter, o fold para aplicar operaciones a una estructura completa sin
modificarla. Por ejemplo, en Haskell o Clojure, las operaciones sobre listas se
realizan sin acceso directo a los índices, favoreciendo un enfoque más declarativo.

2. Intervalos

Los intervalos en la programación funcional son secuencias de valores generadas


automáticamente que permiten trabajar con rangos de números sin necesidad de
bucles explícitos. Los intervalos pueden ser tanto finitos como infinitos, y son
evaluados de manera perezosa (lazy evaluation), lo que significa que no se computan
hasta que se necesiten.
En Haskell, los intervalos se representan de manera concisa:

[1..10] – Lista de enteros del 1 al 10

Este tipo de sintaxis es común en lenguajes funcionales y simplifica el manejo de


secuencias de números sin necesidad de estructuras iterativas explícitas. Además,
Haskell permite definir intervalos infinitos que solo serán evaluados cuando se
necesiten los valores:

[1..] – Lista infinita de números

3. Operadores

Los operadores en la programación funcional son tratados como funciones. Esto


incluye operadores aritméticos, lógicos, o de concatenación de listas. Una
característica importante en muchos lenguajes funcionales es que los operadores
pueden ser currificados, es decir, pueden ser aplicados parcialmente.

Por ejemplo, en Haskell, el operador de suma + es simplemente una función que


recibe dos argumentos:

Add :: Int -> Int -> Int

Add x y = x + y

Este enfoque permite que los operadores se utilicen de manera flexible dentro de
funciones de orden superior, lo que aumenta la modularidad y reutilización del
código. Asimismo, se pueden aplicar parcialmente funciones u operadores a uno de
sus argumentos, lo que facilita la creación de nuevas funciones sin necesidad de
definirlas explícitamente.
4. Aplicaciones de las Listas

Las listas son una estructura de datos central en la programación funcional, donde se
utilizan para representar secuencias de elementos de manera inmutable. Las listas
no se modifican una vez creadas, lo que promueve la inmutabilidad de los datos.
Entre las operaciones más comunes sobre listas se encuentran:

Map: Aplica una función a cada elemento de la lista, devolviendo una nueva lista con
los resultados.

Map (*2) [1, 2, 3] – [2, 4, 6]

Filter: Filtra los elementos de una lista según una condición.

Filter even [1, 2, 3, 4] – [2, 4]

Fold: Reduce una lista a un solo valor acumulando los resultados.

Foldl (+) 0 [1, 2, 3] – 6

Estas operaciones evitan la mutación de las listas originales y siempre retornan


nuevas listas, manteniendo el principio de inmutabilidad. La combinación de estas
funciones permite realizar transformaciones complejas sobre listas de manera
concisa y declarativa.

5. Árboles
Los árboles son estructuras de datos recursivas comúnmente utilizadas en la
programación funcional. En lugar de modificar un árbol existente, las operaciones
sobre árboles crean nuevas versiones sin afectar a la original, lo que garantiza la
inmutabilidad de los datos.

Un ejemplo básico de un árbol binario en Haskell podría definirse de la siguiente


forma:

Data Tree a = Empty | Node a (Tree a) (Tree a)

Esta estructura define un árbol binario donde cada nodo puede contener un valor y
tener dos subárboles (hijos izquierdo y derecho). Las operaciones sobre árboles,
como la búsqueda o la inserción, se realizan de manera recursiva, creando un nuevo
árbol en cada operación.

6. Evaluación Perezosa

La evaluación perezosa es una característica clave de algunos lenguajes funcionales,


como Haskell. Consiste en que las expresiones no se evalúan hasta que su valor es
requerido. Esto permite la construcción de estructuras de datos infinitas y optimiza la
eficiencia del programa, ya que solo se computa lo estrictamente necesario.

Por ejemplo, en Haskell, se puede definir una lista infinita:

[1..] – Lista infinita de enteros

A pesar de ser infinita, esta lista no se evaluará completamente de una vez. Solo los
elementos que sean necesarios serán calculados, lo que permite trabajar con
estructuras teóricamente infinitas sin consumir recursos de manera innecesaria.
7. Conclusión

La programación funcional ofrece una alternativa potente y expresiva para diseñar


programas, basándose en conceptos como la inmutabilidad, la evaluación perezosa,
y el uso de funciones como ciudadanos de primera clase. Las estructuras de datos
como listas y árboles son tratadas de manera inmutable, y los operadores pueden ser
manipulados como funciones, lo que permite crear programas modulares y
fácilmente razonables.

Este paradigma es especialmente útil en aplicaciones concurrentes, donde la


ausencia de efectos secundarios y el uso de estructuras inmutables permiten evitar
muchos de los problemas comunes asociados con la mutabilidad y los hilos. Al
seguir principios como la inmutabilidad y la composición de funciones, los
programas funcionales tienden a ser más predecibles y fáciles de mantener,
favoreciendo la creación de software de alta calidad y con menos errores.

También podría gustarte