UNIDAD 2 Programacion Funcional

14

Click here to load reader

description

UNIDAD 2 Programacion Funcional

Transcript of UNIDAD 2 Programacion Funcional

11INSTITUTO TECNOLGICO SUPERIOR DE CIUDAD ACUA

Materia:PROGRAMACIN LGICA FUNCIONAL

Catedrtico:M.I Jose Yahveh Contreras de los reyes

Trabajo:Unidad 2

Alumno:Ivan Alfredo Gomez Mendez

Carrera:Ingeniera en sistemas computacionales

Semestre:VII

Turno:Matutino

2 DE MARZO 2015

ContenidoUnidad II: Programacin Funcional32.1. Tipo de datos32.2. Funciones42.3. Intervalos62.4. Operadores72.5. Aplicaciones de las listas72.6. rboles8Conclusin:10Bibliografa web:11

Unidad II: Programacin Funcional

La programacin funcional, o mejor dicho, los lenguajes de programacin 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 ejecucin. Adems los programas se estructuran componiendoexpresionesque se evalan como funciones. Dentro de los lenguajes funcionales tenemos Lisp, Scheme, Clojure, Haskell, OCaml y Standard ML, entre otros. Estos lenguajes estn diversidad de tipificacin, donde se encuentran lenguajes dinmicos, estticos y estticos fuertes.

2.1. 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, nmeros decoma flotante(decimales), cadenas alfanumricas, fechas, horas, colores, etc.Por ejemplo, por lo general eltipo "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 multiplicacin. 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 adicin y la sustraccin, pero no la multiplicacin.ste es un concepto propio de lainformtica, ms especficamente de los lenguajes de programacin, aunque tambin se encuentra relacionado con nociones similares de la matemticay lalgica.En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores.Casi todos los lenguajes de programacin explcitamente incluyen la notacin del tipo de datos, aunque lenguajes diferentes pueden usar terminologas diferentes. La mayor parte de los lenguajes de programacin permiten al programador definir tipos de datos adicionales, normalmente combinando mltiples 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 especfica que el dato interpretado como Persona incluir, por ejemplo, un nombre y una fecha de nacimiento.Un tipo de dato puede ser tambin visto como una limitacin impuesta en la interpretacin de los datos en unsistema de tipificacin, describiendo la representacin.La interpretacin y la estructura de losvaloresuobjetosalmacenados en la memoria del ordenador. El sistema de tipificacin usa informacin de los tipos de datos para comprobar laverificacinde los programas que acceden o manipulan los datos.

2.2. Funciones

Los programas escritos en un lenguaje funcional estn constituidos nicamente por definiciones de funciones, entendiendo stas no como subprogramas clsicos de un lenguaje imperativo, sino como funciones puramente matemticas, en las que se verifican ciertas propiedades como latransparencia referencial(el significado de una expresin depende nicamente del significado de sus sobrexpresiones), y por tanto, la carencia total deefectos colaterales.

Existen dos grandes categoras de lenguajes funcionales: los funcionalespurosy loshbridos. La diferencia entre ambos estriba en que los lenguajes funcionales hbridos son menos dogmticos que los puros, al admitir conceptos tomados de loslenguajes imperativos, como las secuencias de instrucciones o la asignacin de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional hbrido.

Funciones de primera clase y de orden superiorFunciones de orden superior son funciones que pueden tomar otras funciones como argumentos o devolverlos como resultados. En clculo, un ejemplo de una funcin de orden superior es el operador diferencial d / dx, que devuelve la derivada de una funcin f.Las funciones de orden superior estn estrechamente relacionadas con las funciones de primera clase en las cuales las funciones de orden superior y lasfunciones de primera clasepueden recibir como argumentos y resultados otras funciones. La distincin entre los dos es sutil: "de orden superior", describe un concepto matemtico de funciones que operan sobre otras funciones, mientras que la "primera clase" es un trmino informtico que describe las entidades del lenguaje de programacin que no tienen ninguna restriccin de su utilizacin (por lo tanto funciones de primera clase pueden aparecer en cualquier parte del programa que otras entidades de primer nivel como los nmeros pueden, incluidos como argumentos a otras funciones y como sus valores de retorno).Las funciones de orden superior permiten la aplicacin parcial, una tcnica en la que se aplica una funcin a sus argumentos uno a la vez, con cada aplicacin devolver una nueva funcin que acepta el siguiente argumento. Esto le permite a uno expresar, por ejemplo, la funcin sucesor como el operador de suma aplicada parcialmente al nmero natural uno.Funciones purasLas 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 utilizados para optimizar el cdigo: Si no se utiliza el resultado de una expresin pura, se puede eliminar sin afectar a otras expresiones. Si una funcin pura se llama con parmetros que no causan efectos secundarios, el resultado es constante con respecto a la lista de parmetros (a veces llamada transparencia referencial), es decir, si la funcin pura se llama de nuevo con los mismos parmetros, 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 evaluacin se puede utilizar, lo que da la libertad al compilador para reordenar o combinar la evaluacin de expresiones en un programa (por ejemplo, usando la poda).La mayora de los compiladores delenguajes imperativosdetectan funciones puras automticamente y realizan la eliminacin de subexpresiones comunes. Sin embargo no siempre es posible detectarlo en bibliotecas pre-compiladas, porque por norma general no dan esta informacin. Esto provoca que no se puedan realizar optimizaciones que podran aplicar a dichas funciones externas. Algunos compiladores, comogcc, s que aaden palabras claves adicionales para que el programador marque explcitamente como puras aquellas funciones externas que procedan, de modo que se le apliquen las optimizaciones pertinentes.Fortran 95tambin permite que declarar funciones "puras".

2.3. Intervalos

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

En el caso de una variable entera, el intervalo cubrir todos los nmeros dentro de su intervalo (incluyendo el mximo y el mnimo).

En el caso de una variable entera, la definicin est restringida a nmeros enteros, y el intervalo cubrir todos los nmeros dentro de su intervalo (incluyendo el mximo y el mnimo).

El intervalo de un array son los lmites superior e inferior del mismo.

Diferencia entre declaracin y modificacin de variables En programacin funcional pura una vez declarada una variable no se puede modificar su valor En algunos lenguajes de programacin (como Scala) este concepto se refuerza definiendo la variable como inmutable (con la directiva val). En programacin imperativa es habitual modificar el valor de una variable en distintos pasos de ejecucin

2.4. Operadores

En programacin declarativa slo existen valores, no hay referencias. La distincin entre valores y referencias es fundamental, sin embargo, en la programacin imperativa.

Diferencia entre valor y referencia Cuando se realiza una asignacin de un valor a una variable debemos considerar que estamos dando un nombre a un objeto matemtico 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. Podramos cambiar las variables guardando en ella otros valores, pero los valores propiamente dichos son inmutables. En la ltima instruccin 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 semntica de copia reciben el nombre de tipos de valor (value types en ingls).

Los tipos de referencia son tipos de datos mutables en los que la asignacin funciona con semntica de referencia.

Por ejemplo, cualquier objeto en Java tiene una semntica de referencia. Cuando asignamos un objeto a una variable, estamos guardando en la variable una referencia al objeto.

2.5. Aplicaciones de las listas Unalista enlazadaes una de lasestructuras de datosfundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia denodos, en los que se guardan campos de datos arbitrarios y una o dos referencias, enlaces opunterosal nodo anterior o posterior. El principal beneficio de las listas enlazadas respecto a losvectoresconvencionales 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 eliminacin de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto est previamente identificado o localizado), pero no permiten unacceso aleatorio. Existen diferentes tipos de listas enlazadas: listas enlazadas simples, listas doblemente enlazadas, listas enlazadas circulares y listas enlazadas doblemente circulares.

Algunas funcionesCaracteres (tipo Char)Cadenas (tipo String)Tipos numricos: Int, Float

ComponentesLos parmetros, que son los valores que recibe la funcin como entrada;El cdigo de la funcin, que son las operaciones que hace la funcin; El resultado (o valor de retorno), que es el valor final que entrega la funcin.2.6. rboles

En informtica unrboles unaestructura de datosampliamente usada que imita la forma de un rbol (un conjunto de nodos conectados). Unnodoes la unidad sobre la que se construye el rbol y puede tener cero o ms nodos hijos conectados a l. Se dice que un nodoespadrede un nodosi existe un enlace desdehasta(en ese caso, tambin decimos quees hijo de). Slo puede haber un nico nodo sin padres, que llamaremosraz. Un nodo que no tiene hijos se conoce comohoja. Los dems nodos (tienen padre y uno o varios hijos) se les conoce comorama.

Formalmente, podemos definir un rbol de la siguiente forma: Caso base: un rbol con slo un nodo (es a la vez raz del rbol y hoja). Un nuevo rbol a partir de un nodoyrbolesde racesconelementos cada uno, puede construirse estableciendo una relacin padre-hijo entrey cada una de las races de losrboles. El rbol resultante denodos tiene como raz el nodo, los nodosson los hijos dey el conjunto de nodos hoja est formado por la unin de losconjuntos hojas iniciales. A cada uno de los rbolesse les denota ahorasubrbolesde la raz.

Usos comunes de los rboles son: Representacin de datosjerrquicos. Como ayuda para realizar bsquedas en conjuntos de datos (ver tambin:algoritmos de bsqueda en rboles).

Conclusin:Vemos que en esta unidad nos habla lo que es la programacin funcional, que es un paradigma basado en la utilizacin de funciones aritmticas. La programacin funcional tiene sus races en elclculo lambda, un sistema formal desarrollado en los aos 1930 para investigar la definicin de funcin, la aplicacin de las funciones y la recursin. Muchos lenguajes de programacin funcionales pueden ser vistos como elaboraciones del clculo lambda.Los lenguajes de programacin funcional, especialmente los que son puramente funcionales, han sido enfatizados en el ambiente acadmico principalmente y no tanto en el desarrollo de software comercial. Sin embargo, lenguajes de programacin importantes tales comoScheme,Erlang,Rust,Objective CamlyHaskell, han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones.

Bibliografa web:http://www.programando.org/blog/2012/11/que-es-la-programacion-funcional/https://prezi.com/ol3tx9g_stwh/programacion-funcional/https://www.google.com.mx/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=arboles+en+programacion+funcional&start=10

Carretera a Presa La Amistad Km 9, Cd. Acua, Coah., C.P. 26220Apartado Postal No. 666, Tel (877) 773 18 00, Fax (877) 773 18 01Correo electrnico: [email protected]: www.tecnologicodeacuna.edu.mx