Sei sulla pagina 1di 15

2.

1 INTRODUCCIÓN AL MODELO DE PROGRAMACIÓN


FUNCIONAL

El paradigma funcional está basado en el modelo matemático de composición


funcional. Utiliza funciones matemáticas puras sin asignaciones destructivas y sin
efecto de lado. (Transforma datos de entrada en un resultado). Se caracteriza por
el uso de expresiones y funciones, una función puede invocar a otra, o el resultado
de una función puede ser usado como argumento de otra función.

La programación funcional o, mejor dicho, los lenguajes de programación


funcionales, son aquellos lenguajes donde las variables no tienen estado no hay
cambios en éstas a lo largo del tiempo y son inmutables no pueden cambiarse los
valores a lo largo de la ejecución. Además, los programas se estructuran
componiendo expresiones que se evalúan como funciones. Dentro de los
lenguajes funcionales tenemos lisp, scheme, clojure, haskell, ocaml y
standard ml, entre otros. Estos lenguajes están diversidad de tipificación, donde
se encuentran lenguajes dinámicos, estáticos y estáticos fuertes.

Un ejemplo con Python la clave de la programación funcional, son las funciones de


orden superior, las cuales reciben otras funciones como argumento, o las devuelven
como resultado. Ejemplo:

def test(func, n):

return func(func(n))

def mult(x):

return x * x

print(test(mult, 2))

16

CHIAPAS-MÉXICO_2020
2.2. TIPO DE DATOS

Es un atributo de una parte de los datos que indica al ordenador (y/o al programador)
algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer
restricciones en los datos, como qué valores pueden tomar y qué operaciones se
pueden realizar. Tipos de datos comunes son: enteros, números de coma
flotante (decimales), cadenas alfanuméricas, fechas, horas, colores, etc.

Por ejemplo, por lo general el tipo "int" representa un conjunto de enteros de 32 bits
cuyo rango va desde el -2.147.483.648 al 2.147.483.647, así como las operaciones
que se pueden realizar con los enteros, como son la suma, la resta, y la
multiplicación. Los colores, por su parte, se representan como tres bytes denotando
la cantidad de rojo, verde y azul, y una cadena de caracteres representando el
nombre del color; las operaciones permitidas en este caso incluyen la adición y la
sustracción, pero no la multiplicación.

Este es un concepto propio de la informática, más específicamente de los lenguajes


de programación, aunque también se encuentra relacionado con nociones similares
de la matemática y la lógica.

En un sentido amplio, un tipo de datos define un conjunto de valores y las


operaciones sobre estos valores. casi todos los lenguajes de programación explí-
citamente incluyen la notación del tipo de datos, aunque lenguajes diferentes
pueden usar terminologías diferentes. La mayor parte de los lenguajes de
programación permiten al programador definir tipos de datos adicionales,
normalmente combinando múltiples elementos de otros tipos y definiendo las
operaciones del nuevo tipo de dato. por ejemplo, un programador puede crear un
nuevo tipo de dato llamado "persona" que específica que el dato interpretado como
persona incluirá, por ejemplo, un nombre y una fecha de nacimiento.

Un tipo de dato puede ser también visto como una limitación impuesta en la
interpretación de los datos en un sistema de tipificación, describiendo la
representación.

CHIAPAS-MÉXICO_2020
La interpretación y la estructura de los valores u objetos almacenados en la
memoria del ordenador. El sistema de tipificación usa información de los tipos de
datos para comprobar la verificación de los programas que acceden o manipulan
los datos.

CHIAPAS-MÉXICO_2020
2.3. FUNCIONES

Los programas escritos en un lenguaje funcional están constituidos únicamente por


definiciones de funciones, entendiendo éstas no como subprogramas clásicos de
un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se
verifican ciertas propiedades como la transparencia referencial (el significado de
una expresión depende únicamente del significado de sus sobrexpresiones) y, por
tanto, la carencia total de efectos colaterales.

EJEMPLO EN PHYTON USO DE LAS FUNCIONES


Las funciones en Python es que estas pueden ser asignadas a variables, lo cual nos
abre la puerta a que funciones puedan ser usadas como argumento de otras
funciones y que funciones retornen funciones.

Almacenamos nuestra función suma en la variable funcion_suma, variable que es


utilizada como argumento en la función operacion. Esta función se encarga de
ejecutar nuestro argumento y retorna el resultado de la operación. Con esto nuestra
función operacion puede ser utilizada para ejecutar sumas, restas, multiplicaciones
o cualquier tipo de operación que necesitemos.

CHIAPAS-MÉXICO_2020
FUNCIONES ANÓNIMAS

Funciones las cuales realizan una tarea en concreto, regularmente pequeña. En


estos casos haremos uso de funciones lambda. Una función lambda es una función
anónima, una función que no posee un nombre. En Python la estructura de una
función lambda es la siguiente.

Aquí un par de ejemplos

FUNCIÓN MAP
La función map nos permite aplicar una función sobre cada uno de los elementos
de una colección (Listas, tuplas, etc.…).

La estructura de la función es la siguiente.

CHIAPAS-MÉXICO_2020
2.4. INTERVALOS

El intervalo de una variable está definido como la diferencia entre el valor más alto
y el valor más bajo que esa variable puede guardar.

En el caso de una variable entera, el intervalo cubrirá todos los números dentro de
su intervalo (incluyendo el máximo y el mínimo).

En el caso de una variable entera, la definición está restringida a números enteros,


y el intervalo cubrirá todos los números dentro de su intervalo (incluyendo el máximo
y el mínimo).

El intervalo de un array es los límites superior e inferior del mismo.

Diferencia entre declaración y modificación de variables

En programación funcional pura una vez declarada una variable no se puede


modificar su valor.

En algunos lenguajes de programación (como scala) este concepto se refuerza


definiendo la variable como inmutable (con la directiva val).

En programación imperativa es habitual modificar el valor de una variable en


distintos pasos de ejecución.

CHIAPAS-MÉXICO_2020
CHIAPAS-MÉXICO_2020
2.5. OPERADORES

En programación declarativa sólo existen valores, no hay referencias.

La distinción entre valores y referencias es fundamental, sin embargo, en la


programación imperativa.

Diferencia entre valor y referencia

Cuando se realiza una asignación de un valor a una variable debemos considerar


que estamos dando un nombre a un objeto matemático que no puede ser modificado
o que estamos copiando el valor en la variable.

Por ejemplo, en java, los tipos de datos primitivos son valores. las asignaciones
valores de estos tipos a variables realizan copias de valores:

En la variable a se copia el valor 4 y en las variables b y c se copia el valor 2. No


hay forma de modificar (mutar) esos valores. Podríamos cambiar las variables
guardando en ella otros valores, pero los valores propiamente dichos son
inmutables. En la última instrucción modificamos el valor de la variable b, pero el
valor de la variable c sigue siendo 2.

Los tipos de datos cuyos valores son inmutables y sus asignaciones tienen una
semántica de copia reciben el nombre de tipos de valor (value types en inglés).

Los tipos de referencia son tipos de datos mutables en los que la asignación
funciona con semántica de referencia.

Por ejemplo, cualquier objeto en java tiene una semántica de referencia. Cuando
asignamos un objeto a una variable, estamos guardando en la variable una
referencia al objeto.

CHIAPAS-MÉXICO_2020
CHIAPAS-MÉXICO_2020
2.6. APLICACIONES DE LAS LISTAS

Una lista enlazada es una de las estructuras de datos fundamentales, y puede ser
usada para implementar otras estructuras de datos. Consiste en una secuencia
de nodos, en los que se guardan campos de datos arbitrarios y una o dos
referencias, enlaces o punteros al nodo anterior o posterior. El principal beneficio de
las listas enlazadas respecto a los vectores convencionales es que el orden de los
elementos enlazados puede ser diferente al orden de almacenamiento en la
memoria o el disco, permitiendo que el orden de recorrido de la lista sea diferente
al de almacenamiento.

Las listas enlazadas permiten inserciones y eliminación de nodos en cualquier punto


de la lista en tiempo constante (suponiendo que dicho punto está previamente
identificado o localizado), pero no permiten un acceso aleatorio. Existen diferentes
tipos de listas enlazadas: listas enlazadas simples, listas doblemente enlazadas,
listas enlazadas circulares y listas enlazadas doblemente circulares.

algunas funciones:

caracteres (tipo char)

cadenas (tipo string)

tipos numéricos: int, float

componentes:

 Los parámetros, que son los valores que recibe la función como entrada
 El código de la función, que son las operaciones que hace la función el
resultado (o valor de retorno), que es el valor final que entrega la función.

CHIAPAS-MÉXICO_2020
CHIAPAS-MÉXICO_2020
2.7. ARBOLES

En informática un árbol es una estructura de datos ampliamente usada que imita la


forma de un árbol (un conjunto de nodos conectados). Un nodo es la unidad sobre
la que se construye el árbol y puede tener cero o más nodos hijos conectados a él.
Se dice que un nodo es padre de un nodo si existe un enlace desde hasta (en ese
caso, también decimos que es hijo de). Sólo puede haber un único nodo sin padres,
que llamaremos raíz. un nodo que no tiene hijos se conoce como hoja. Los demás
nodos (tienen padre y uno o varios hijos) se les conoce como rama.

Formalmente, podemos definir un árbol de la siguiente forma:

· Caso base: un árbol con sólo un nodo (es a la vez raíz del árbol y hoja).

· Un nuevo árbol a partir de un nodo y árboles de raíces con elementos cada uno,
puede construirse estableciendo una relación padre-hijo entre y cada una de las
raíces de los árboles. El árbol resultante de nodos tiene como raíz el nodo, los
nodos son los hijos de y el conjunto de nodos hoja está formado por la unión de
los conjuntos hojas iniciales. A cada uno de los árboles se les denota
ahora subárboles de la raíz.

Usos comunes de los árboles son:

· Representación de datos jerárquicos.

· Como ayuda para realizar búsquedas en conjuntos de datos (ver


también: algoritmos de búsqueda en Árboles).

CHIAPAS-MÉXICO_2020
CHIAPAS-MÉXICO_2020
2.8. LA EVALUACIÓN PEREZOSA

En la teoría de lenguajes de programación, La evaluación perezosa (del inglés lazy


evaluation) 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.

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. Además, la evaluación perezosa puede
conducir a fragmentar la memoria.

La evaluación perezosa es frecuentemente combinada con memoización, tal y como


lo describe Jon Bentley en Writing Efficient Programs (Escribiendo Programas

CHIAPAS-MÉXICO_2020
Eficientes). Después de que el valor de una función sea computado para un
parámetro o una serie de estos, el resultado es almacenado en una tabla de
consulta que está organizada por los valores de estos parámetros; la próxima vez
que se le llama a la función, la tabla es consultada para determinar si el resultado
para esa combinación de parámetros está disponible. Si es el caso, la función
devuelve dicho resultado. Si no, la función es evaluada y otro elemento es añadido
a la tabla para reutilización posterior.

Lo contrario de la evaluación perezosa sería la evaluación acaparadora, o


evaluación estricta, que es el modo de evaluación por defecto en la mayoría de los
lenguajes de programación.

CHIAPAS-MÉXICO_2020

Potrebbero piacerti anche