PLF

13
INSTITUTO TECNOLOGICO DE TIJUANA DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN UNIDAD I “GUÍA DE ESTUDIO” PROGRAMACIÓN LÓGICA Y FUNCIONAL 1SC8B Luis Alfonso Gaxiola Vega Salgado García Andrea Berenice 1021 1183

description

programacion logica y funcional

Transcript of PLF

INSTITUTO TECNOLOGICO DE TIJUANADEPARTAMENTO DE SISTEMAS Y COMPUTACIN

UNIDAD IGUA DE ESTUDIO

PROGRAMACIN LGICA Y FUNCIONAL1SC8BLuis Alfonso Gaxiola VegaSalgado Garca Andrea Berenice1021 1183

19 de febrero de 2014

0. CONCEPTO DE PLFPROGRAMACIN FUNCIONAL: Se basa en el uso de las funciones matemticas para producir mejores y ms eficientes resultados.PROGRAMACIN LGICA: Estudia el uso de la lgica para el planteamiento de problemas y el control sobre las reglas de inferencia para alcanzar la solucin automtica.

1. ESTILOS DE PROGRAMACIN Criterios para un buen estilo:1. Nombres significativos para variables, controles, y procedimientos.1. Identacin (sangras) y espacios apropiados en el cdigo.1. Documentar el cdigo (poner comentarios para aclarar).1. Mdulos adaptables.1. Minimizar el acoplamiento.1. Minimizar alcance de los datos hasta donde sea posible.1. Nombre de controles en VBEstilos de programacin1. Indentacin1. Estilo K&R1. Estilo Allman1. Estilo BSD KNF1. Estilo Whitesmiths1. Estilo GNU

2. ANTECEDENTES DE LA PLFLos orgenes tericos del modelo funcional se remontan a los aos 30 en los cuales Church propuso un nuevo modelo de estudio de la computabilidad mediante el clculo lambda. Este modelo permita trabajar con funciones como objetos de primera clase. En esa misma poca, Shnfinkel y Curry construan los fundamentos de la lgica combinatoria que tendr gran importancia para la implementacin de los lenguajes funcionales.En 1964, Peter Landin dise la mquina abstracta SECD para mecanizar la evaluacin de expresiones, defini un subconjunto no trivial de Algol-60 mediante el clculo lambda e introdujo la familia de lenguajes ISWIM (If You See What I Mean) con innovaciones sintcticas (operadores infijos y espaciado) y semnticas importantes. En 1978 J. Backus (uno de los diseadores de FORTRAN y ALGOL) consigui que la comunidad informtica prestara mayor atencin a la programacin funcional con su artculo Can Programming be liberated from the Von Neumann style? en el que criticaba las bases de la programacin imperativa tradicional mostrando las ventajas del modelo funcional. Adems Backus dise el lenguaje funcional FP (Functional Programming) con la filosofa de definir nuevas funciones combinando otras funciones. A comienzos de los ochenta surgieron una gran cantidad de lenguajes funcionales debido a los avances en las tcnicas de implementacin. Entre stos, se podran destacar Hope, LML, Orwell, Erlang, FEL, Alfl, etc. Esta gran cantidad de lenguajes perjudicaba el desarrollo del paradigma funcional. En septiembre de 1987, se celebr la conferencia FPCA en la que se decidi formar un comit internacional que disease un nuevo lenguaje puramente funcional de propsito general denominado Haskell. Con el lenguaje Haskell se pretenda unificar las caractersticas ms importantes de los lenguajes funcionales. Como las funciones de orden superior, evaluacin perezosa, inferencia esttica de tipos, tipos de datos definidos por el usuario, encaje de patrones y listas por comprensin. Al disear el lenguaje se observ que no exista un tratamiento sistemtico de la sobrecarga con lo cual se construy una nueva solucin conocida como las clases de tipos. Mientras que los inicios de la programacin lgica se dan gracias a los primeros trabajos de inteligencia artificial. Los cuales originaron el primer lenguaje de programacin que contempla los mecanismos de inferencia necesarios para la demostracin automtica de teoremas. El lenguaje de programacin Prolog se origin del trabajo hecho por Robert A. Kowalski en la Universidad de Edinburgh y Alain Colmeraur en la Universidad de Aix-Marseille (Francia) en los aos 70. La investigacin de Kowolski en el rea de deduccin automatizada, llev al desarrollo con Colmerauer al uso formal de lgica como un lenguaje de programacin. Kowolski proporcion la base terica y Colmerauer inici la programacin de Prolog. Colmeraur y Phillipe Roussel desarrollaron el primer intrprete, y David Warren de la Universidad de Edinburgh desarroll el primer compilador Prolog. La mayora de las implementaciones comerciales de Prolog usan la misma sintaxis desarrollada en Edinburgh. Su nombre proviene de las palabras en ingles Programming in Logic.

1. HASKELL: Es un lenguaje de programacin moderno, estndar, no estricto, puramente funcional. Posee todas las caractersticas avanzadas, incluyendo polimorfismo de tipos, evaluacin perezosa y funciones de alto orden. Tambin es un tipo de sistema que soporta una forma sistemtica de sobrecarga y un sistema modular. Est especficamente diseado para manejar un ancho rango de aplicaciones, tanto numricas como simblicas. Para este fin, Haskell tiene una sintaxis expresiva y una gran variedad de constructores de tipos, a parte de los tipos convencionales (enteros, punto flotante y booleanos). 1. SCHEME: Es un dialecto de Lisp. Scheme es un lenguaje actual. Existen mltiples proyectos y bibliotecas que se estn implementando en la actualidad en Scheme. Las primitivas de Scheme consisten en un conjunto de tipos de datos, formas especiales y funciones incluidas en el lenguaje. los tipos de datos primitivos de Scheme, as como algunas funciones primitivas para trabajar con valores de esos tipos.1. Booleanos1. Nmeros1. Caracteres1. Cadenas1. Smbolos1. Procedimientos1. Parejas y listas1. ALF: Anoter Logical Framework. Este lenguaje combina la programacin lgica con la programacin funcional (funcional basado en la evaluacin de expresiones y funciones matemticas ms que en la utilizacin de comandos como , ). Al igual que Prolog, ALF esta basado en clusulas de Horn (por eso es programacin lgica) pero tambin en funciones y ecuaciones (y por esto es tambin programacin funcional). En ALF, se puede mezclar expresiones y ecuaciones; puedes poner una expresin funcional como si fuese un predicado y cualquier predicado puede ser introducido como condicin en cualquier ecuacin.

3. TIPOS DE DATOS DE LA PLFPROGRAMACIN LGICAEn Prolog, existen determinados valores con peculiaridades de notacin y predicados asociados que los diferencian del resto de valores convirtindolos en una especie de tipo de datos. En todo caso, se necesita delimitar grupos de valores que acten como tipos de datos diferenciados en los programas. Las listas son el tipo de dato ms utilizado en Prolog ya que se sirven de ellas otros tipos de datos, como por ejemplo, rboles genricos y grafos. PROGRAMACIN FUNCIONALUn tipo de dato es una forma de clasificar un valor de acuerdo a sus propiedades, representa una clase de dominio de los datos.Los lenguajes funcionales, en particular Haskell, tienen un rico conjunto de datos atmicos predefinidos, tales como los 1. Numricos, int1. integer (de mayor precisin que el anterior)1. float1. double1. char1. bool El sistema de tipos de Haskell es uno de los ms sofisticados que existen. Es un sistema polimrfico, que permite una gran flexibilidad de programacin, pero a la vez mantiene la correctitud de los programas. Contrariamente a la mayora de los lenguajes de programacin procedimentales actuales, Haskell utiliza un sistema de inferencias de tipos, es decir sabe el tipo resultante de una expresin, por lo que las anotaciones de tipo en un programa son opcionales. El lenguaje de programacin funcional Hope tiene un tipo de datos. En particular las operaciones y los operandos de las expresiones tienen tipos. Hope comprueba los tipos de una expresin antes de evaluarla. Se asegura que los tipos de las operaciones y los operandos son los esperados al evaluar una expresin funcional.En Hope existen tres tipos de datos bsicos:1. num: Nmeros enteros (representados en expresiones como secuencia de dgitos).1. truval: Valores booleanos (solamente puede tomar el valor true o false).1. char: Caracteres imprimibles (tienen que estar encerrados entre comillas simples).En Hope+ se aade el tipo real (nmeros reales). Los tipos de datos en Scheme son:

4. ENTORNO DE LA PLFPROGRAMACIN LOGICA El lenguaje de programacin lgica por excelencia esProlog, que cuenta con diversas variantes. La ms importante es la programacin lgica con restricciones, que posibilita la resolucin deecuacioneslineales adems de la demostracin de hiptesis.Un entorno de desarrollo de prolog se compone de:1. Un compilador. Transforma el cdigo fuente en cdigo de byte.1. Un intrprete. Ejecuta el cdigo de byte.1. Un Shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a las interfaces de lnea de comando de los sistemas operativos.1. Una biblioteca de utilidades. Estas bibliotecas son, en general, muy amplias. Permiten funcionalidades bsicas como manipular cadenas, ent/sal.

PROGRAMACIN FUNCIONALHaskell cuenta con los siguientes entornos de desarrollo:1. Haskell support for Eclipse(Soporte Haskell para Eclipse)Eclipse es una plataforma IDE abierta, extensible, para "todo y nada en particular". Est implementado en Java y funciona en varias plataformas. El IDE Java construido sobre l ya se ha hecho muy popular entre los desarrolladores Java. Las herramientas de Haskell lo extienden con soporte para edicin (coloreo de sintaxis, asistencia de cdigo), compilacin y ejecucin de programas Haskell desde el IDE. Ms caractersticas, como navegacin de cdigo fuente y mdulos, se agregarn en el futuro.1. hIDEhIDE es un IDE para Haskell con interfaz grfica, escrito con gtk+hs. No incluye un editor, sino interfases con NEdit, vim o GNU emacs.1. hIDE-2A travs de la edad oscura muchos programadores soaron con la herramienta mxima. En respuesta a este deseo inquietante, el cual nosotros tal vez hayamos tenido de sobra, el tro dinmico de #Haskellaniacs (dons, dcoutts y Lemmih) anuncian, para el alivio de la comunidad, que un feto ha sido concebido:hIDE - the Haskell Integrated Development Environment(Entorno de Desarrollo Integrado de Haskell). Hasta ahora el no nacido integra reconocimiento de cdigo fuente y un editor camalen, resintiendo estos en un animado entorno gtk2. A pesar de que ningn vidente haya predicho la fecha de nacimiento de nuestra criatura, esperamos que el mero conocimiento de su existencia lleve paz y tranquilidad a la comunidad como el aceite en aguas turbias. Ver tambin:Capturas de HIDEyHIDE.1. JCreator with Haskell support(JCreator con soporte Haskell)JCreator es un IDE Java para Windows altamente personalizable. Las caractersticas incluyen soporte extensivo para proyectos, barras de herramientas totalmente personalizables (incluyendo las imgenes de herramientas definidas por el usuario) y mens, aumentar/disminuir sangrado para un bloque de texto seleccionado (tab/shift+tab respectivamente). El mdulo de soporte Haskell agrega coloreo de sintaxis para cdigo Haskell y winhugs, hugs, un verificador esttico (si haces doble clic en el mensaje de error, JCreator saltar a la lnea correcta del archivo correcto y lo marcar en amarillo) y el informe Haskell 98 como herramientas. Plataformas: Win95, Win98, WinNT y Win2000 (slo Win95 no se ha probado todava). Tamao: 6 MB. JCreator es una marca registrada de Xinox Software; Copyright 2000 Xinox Software. El mdulo de soporte Haskell es desarrollado porRijk-Jan van Haaften.1. Visual HaskellVisual Haskell es un entorno de desarrollo completo para software Haskell, basado en la plataformaMicrosoft Visual Studio. Visual Haskell se integra con el editor de Visual Studio para ofrecer caractersticas interactivas que ayudan al desarrollo en Haskell, y permite la construccin de proyectos que consisten en mltiples mdulos Haskell, usando la infraestructura de empaquetamiento/compilacin Cabal.1. KDevelopEste IDE soporta muchos lenguajes. Para Haskellactualmente soportaadministracin de proyectos, coloreo de sintaxis, compilacin (con GHC) y ejecucin dentro del IDE.1. haste- Haskell TurboEdithaste - Haskell TurboEdit - es un IDE para el lenguaje de programacin funcional Haskell, escrito en Haskell.1. VitalVital es un entorno de programcin visual. Est particularmente pensado para soportar el estilo abierto, incremental de desarrollo usualmente preferido por usuarios finales (ingenieros, cientficos, analistas, etc.).1. PivotalPivotal 0.025 es un prototipo de un entorno al estilo de Vital para Haskell. A diferencia de Vital, Pivotal est implementado enteramente en Haskell. La implementacin est basada en el uso de la librera hs-plugins para permitir la compilacin y evaluacin dinmica de expresiones de Haskell junto con la librera gtk2hs para implementar la interfase grfica.

5. VENTAJAS Y DESVENTAJAS DE LA PLF / PARADIGMAS DE PROGRAMACINPROGRAMACIN LGICAVentajas Simplicidad Cercana a las especificaciones del problema realizada con lenguajes formales Sencillez, potencia y elegancia Metodologa rigurosa de especificacin Sencillez en la implementacin de estructuras complejasDesventajas Poco eficientes Poco utilizado en aplicaciones reales

PROGRAMACIN FUNCIONALVentajas Fuertemente tipados Incorporan funciones de orden superior Evaluacin paralela Reutilizacin de cdigo Mayor abstraccin Datos potencialmente infinitos Facilidad a la hora de implementar estructuras de datos complejasDesventajas Falta de estandarizacin Bajo rendimiento de los programas

PARADIGMAS DE PROGRAMACINLos paradigmas de programacin nos indican las diversas formas que, a lo largo de la evolucin de los lenguajes, han sido aceptadas como estilos para programar y para resolver los problemas por medio de una computadora.Los ms importantes:1. Paradigma funcional1. Paradigma lgico1. Paradigma imperativo o procedural1. Paradigma orientado a objetos

6. VENTAJAS Y DESVENTAJAS DE LOS COMPILADORES E INTERPRETESVENTAJAS Y DESVENTAJAS DE LOS COMPILADORESVentajas1. Autnomo y eficiente: Una gran ventaja de los programas que se compilan es que son unidades autnomas listas para ser ejecutadas. Debido a que ya se encuentran compiladas en archivos binarios de lenguaje mquina, no es necesaria una segunda aplicacin o paquete que el usuario deba mantener actualizado. Si un programa se compila para Windows en una arquitectura x86, el usuario final solamente necesita un sistema operativo Windows ejecutndose en una arquitectura x86. Adicionalmente, un paquete precompilado puede ejecutarse ms rpido que un cdigo fuente compilador intrprete en tiempo real.1. Optimizacin de hardware: Si bien estar restringido a un paquete de hardware especfico tiene sus desventajas, compilar un programa tambin puede incrementar el desempeo de este ltimo. Los usuarios pueden enviar opciones especficas a los compiladores, relacionadas con los detalles del hardware en el que se ejecutar el programa. Esto permite que el compilador genere cdigo en lenguaje mquina que hace un uso ms eficiente del hardware especificado, a diferencia del cdigo ms genrico. Esto tambin permite a los usuarios avanzados el optimizar el desempeo de un programa en sus computadoras.Desventajas1. Especfico a un hardware: Dado que un compilador traduce el cdigo fuente a un lenguaje mquina especfico, los programas deben ser compilados especficamente para OS X, Windows o Linux, as como para arquitecturas de 32 o 64 bits. Para un programador o una compaa de software que intentan hacer que un producto llegue a la mayor audiencia posible, esto representa la necesidad de tener mltiples versiones del cdigo fuente para la misma aplicacin, lo cual da como resultado una mayor cantidad de tiempo empleada en el mantenimiento del cdigo fuente y problemas adicionales cuando son liberadas las actualizaciones.1. Tiempos de compilacin: Una de las desventajas de tener un compilador es que verdaderamente debe compilar cdigo fuente. Mientras que los pequeos programas que muchos desarrolladores novatos codifican requieren cantidades triviales de tiempo para ser compilados, las grandes suites de aplicaciones pueden tardar cantidades significativas de tiempo en compilar. Cuando los programadores no tienen nada que hacer mas que esperar a que el compilador termine, este tiempo puede hacer el proceso ms tardado, especialmente durante la etapa de desarrollo, cuando el cdigo debe ser compilado para probar su funcionalidad y resolver errores.VENTAJAS Y DESVENTAJAS DE LOS INTRPRETESVentajas 1. Facilidad de depuracin de programas: la interpretacin puede interrumpirse en cualquier momento para examinar o modificar los valores de las variables o la situacin en la ejecucin. La tabla de smbolos est disponible. Se pueden corregir los errores y continuar. Trazas y paradas programadas. Saltos en el programa. Abandonos de subrutinas.1. Rapidez en el desarrollo.1. Flexibilidad: permite realizar acciones complejas, imposibles o muy difciles con un compilador, como las siguientes:1. Ejecucin de cadenas de caracteres mediante operadores como "execute", "interprete" o "evalquote".1. Modificar sobre la marcha el significado de los smbolos e incluso prescindir por completo de las declaraciones.1. Obtener unligamiento dinmicocompleto en los sistemas orientados a objetos.1. Simplificar la gestin de memoria en los programas fuente.Desventajas1. Velocidad: usualmente un orden de magnitud menor que la de un programa compilado.1. Tamao del programa objeto, que exige aadir el intrprete al programa propiamente dicho.