PLyF_U2_PIN_Actividad1_Ensayo.pdf

7
  Instituto Tecnológico de Querétaro Unidad Pinal de Amoles División de Educación Presencial a Distancia Materia: Programac ión Lógica y Funcional Ingeniería en Sistemas Computacionales. Actividad: Ensayo Temas Unidad 2 Alumno: José Luis Pérez Ortega Asesor: Ing. Alfredo Andrés Núñez Ugalde [email protected]  Tutor: I.S.C. Dany Josué Molina Aguilar [email protected]  Martes 02-Febrero-20 15 

Transcript of PLyF_U2_PIN_Actividad1_Ensayo.pdf

  • Instituto Tecnolgico de Quertaro

    Unidad Pinal de Amoles

    Divisin de Educacin Presencial a Distancia

    Materia: Programacin Lgica y Funcional

    Ingeniera en Sistemas Computacionales.

    Actividad: Ensayo Temas Unidad 2

    Alumno: Jos Luis Prez Ortega

    Asesor: Ing. Alfredo Andrs Nez Ugalde

    [email protected]

    Tutor: I.S.C. Dany Josu Molina Aguilar

    [email protected]

    Martes 02-Febrero-2015

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    2

    J o s L u i s P r e z O r t e g a

    Pgina 2

    Unidad 2. Programacin Funcional

    Definicin de 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 componiendo expresiones que 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.

    Que quiere decir con esto de que no hay cambios a lo largo de la ejecucin, sucede que cuando

    estas compilando un pequeo programa con valores ya definidos, al momento que quieres

    cambiar alguna variable, evidentemente compilador no te dejara moverle piezas al cdigo a

    menos que detengas la compilacin del programa y realices los cambios correspondientes al

    cdigo, tal es el caso del lenguaje de programacin c# ya sea en consola o aplicacin de Windows

    Form, que no te deja hacer modificaciones al cdigo mientras el programa se esta ejecutando.

    Software que se utiliza para la Programacin Funcional En este rubro de programacin existe una comunidad de lenguajes de programacin para todo

    tipo de aplicaciones los cuales pueden ser imperativos y funcionales, los cuales explicaremos a

    continuacin.

    Lenguaje de programacin imperativo

    Un lenguaje imperativo programa mediante una serie de comandos, agrupados en bloques y

    compuestos de rdenes condicionales que permiten al programa retornar a un bloque de

    comandos si se cumple la condicin. Estos fueron los primeros lenguajes de programacin en uso y

    an hoy muchos lenguajes modernos usan este principio.

    Lenguaje de programacin funcional

    Un lenguaje de programacin funcional(a menudo llamado lenguaje procedimental) es un

    lenguaje que crea programas mediante funciones, devuelve un nuevo estado de resultado y recibe

    como entrada el resultado de otras funciones. Cuando una funcin se invoca a s misma, hablamos

    de recursividad.

    Interpretacin y compilacin

    Los lenguajes de programacin pueden, en lneas generales, dividirse en dos categoras:

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    3

    J o s L u i s P r e z O r t e g a

    Pgina 3

    lenguajes interpretados

    lenguajes compilados

    Lenguaje interpretado

    Un lenguaje de programacin es, por definicin, diferente al lenguaje mquina. Por lo tanto, debe

    traducirse para que el procesador pueda comprenderlo. Un programa escrito en un lenguaje

    interpretado requiere de un programa auxiliar (el intrprete), que traduce los comandos de los

    programas segn sea necesario.

    Lenguaje compilado

    Un programa escrito en un lenguaje "compilado" se traduce a travs de un programa anexo

    llamado compilador que, a su vez, crea un nuevo archivo independiente que no necesita ningn

    otro programa para ejecutarse a s mismo. Este archivo se llama ejecutable.

    Un programa escrito en un lenguaje compilado posee la ventaja de no necesitar un programa

    anexo para ser ejecutado una vez que ha sido compilado. Adems, como slo es necesaria una

    traduccin, la ejecucin se vuelve ms rpida.

    En esta ocasion nos centraremos a los lenguajes especializados en programacion funcional los

    cuales son los siguientes: Lenguaje R

    Es un lenguaje para anlisis estadstico y grfico creado por Ross Ihaka y Robert Gentleaman.

    Los anlisis grficos pueden ser visualizados en su propia ventana, permitiendo ser guardada en

    varios formatos(pdf, png, etc), mientras que los resultados de anlisis estadsticos los podemos ver

    en la misma pantalla.

    Lisp

    Lisp es un lenguaje tipo funcional, es el segundo lenguaje de alto nivel ms viejo, los dialectos de

    Lisp ms ampliamente conocidos son el Scheme y Common Lisp.

    El nombre Lisp viene de "LISt Processing" (Proceso de LIStas). Una de las estructuras de datos

    importante de Lisp son las listas encadenadas, el cdigo fuente de lisp esta compuesto de listas.

    Es un lenguaje til para desarrollar la inteligencia artificial.

    Caractersticas, Ventajas y Desventajas de la Programacin Funcional Como vern todo ambito de programacion tiene determinadas caracteristicas, pros y contras que

    en este apartado veremos en un dos por tres:

    Caractersticas

    Los programas escritos en un lenguaje funcional estn constituidos nicamente por

    definiciones de funciones

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    4

    J o s L u i s P r e z O r t e g a

    Pgina 4

    La no existencia de asignaciones de variables y la falta de construcciones estructuradas

    como la secuencia o la iteracin

    Existen dos grandes categoras de lenguajes funcionales: los funcionales puros y

    los hbridos

    En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva,

    conservando a la vez su transparencia referencial.

    Ventajas

    Ausencia de efectos colaterales

    Proceso de depuracin menos problemtico

    Pruebas de unidades ms confiables

    Mayor facilidad para la ejecucin concurrente

    Desventajas

    Falta de estandarizacin

    Bajo rendimiento de los programas

    Que es Prolog Ahora nos centraremos en el lenguaje de programacion funcional llamado Prolog, que al igual que

    todos los lenguajes de programacion tiene su propia historia, jerarqua e interfaz de programacion.

    Es un Lenguaje de programacin lgico e interpretado (Prolog). La programacin lgica es un

    paradigma de los lenguajes de programacin en el cual los programas se consideran como una

    serie de aserciones lgicas. De esta forma, el conocimiento se representa mediante reglas,

    tratndose de sistemas declarativos.

    Historia

    Prolog es un lenguaje de programacin simple pero poderoso desarrollado en la Universidad de

    Aix-Marseille (Marsella, Francia) por los profesores Alain Colmerauer yPhilippe Roussel, como una

    herramienta prctica para programacin lgica. Naci de un proyecto que no tena como objetivo

    la implementacin de un lenguaje de programacin, sino el procesamiento de lenguajes naturales.

    Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean

    Trudel y Philippe Roussel en la parte de deduccin e inferencia del sistema. Interesado por el

    mtodo de resolucin SL, Trudel persuadi a Robert Kowalski para que se uniera al proyecto,

    dando lugar a una versin preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versin

    definitiva en 1972. Esta primera versin de Prolog fue programada en ALGOLW.Inicialmente se

    trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarroll

    un compilador capaz de traducir Prolog en un conjunto de instrucciones de una mquina abstracta

    denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un

    lenguaje semi-interpretado.

    Si bien en un principio se trataba de un lenguaje de uso reducido, la aparicin de intrpretes del

    mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domsticos de 16

    bits (ej: Turbo PROLOG de Borland, entre otros muchos) a lo largo de la dcada de 1980contribuy

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    5

    J o s L u i s P r e z O r t e g a

    Pgina 5

    notablemente a su popularizacin.Otro importante factor en su difusin fue la adopcin del

    mismo para el desarrollo del proyecto de la quinta generacin de computadoras a principios de la

    dcada de los 1980, en cuyo contexto se desarroll la implementacin paralelizada del lenguaje

    llamada KL1 y del que deriva parte del desarrollo moderno de Prolog. Las primeras versiones del

    lenguaje diferan, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis,

    emplendose mayormente como forma normalizada el dialecto propuesto por la Universidad

    de Edimburgo , hasta que en 1995 se estableci un estndar ISO (ISO/IEC 13211-1), llamado ISO-

    Prolog.

    Entorno de desarrollo Prolog

    Prolog es un lenguaje de programacin seminterpretado. Su funcionamiento es muy similar a Java.

    El cdigo fuente se compila a un cdigo de byte el cul se interpreta en una mquina virtual

    denominada Warren Abstract Machine (comnmente denominada WAM).

    Por eso, un entorno de desarrollo Prolog se compone de:

    Un compilador: Transforma el cdigo fuente en cdigo de byte. A diferencia de Java, no

    existe un Standard al respecto. Por eso, el cdigo de byte generado por un entorno de

    desarrollo no tiene por que funcionar en el intrprete de otro entorno.

    Un intrprete: Ejecuta el cdigo de byte. Un shell o top-level. Se trata de una utilidad que

    permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los

    interfaces de lnea de comando de los sistemas operativos.

    Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos

    incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades bsicas

    como manipular cadenas, entrada/salida, etc.

    Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la

    programacin con restricciones, concurrente, orientada a objetos, etc. Sera injusto no mencionar

    aqu el entorno de desarrollo ms popular: SICStus Prolog, si bien, se trata de un entorno de

    desarrollo comercial (no gratuito).

    SICStus, CIAO Prolog, y posiblemente otros ms, ofrecen entornos integrados generalmente

    basados en Emacs que resultan muy fciles de usar. CIAO Prolog adems ofrece un auto

    documentador similar al existente para Java adems de un preprocesador de programas.

    Prcticamente todos ellos son multiplataforma.

    Elementos en Prolog

    Como hemos especificado antes, para construir programas en Prolog necesitamos una serie de

    elementos. Vamos a especificarlos:

    tomos: Es una definicin genrica de un objeto del mundo que queremos representar.

    Predicados: Nos permite especificar caractersticas de los objetos de nuestro mundo o las

    relaciones entre ellos.

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    6

    J o s L u i s P r e z O r t e g a

    Pgina 6

    Variables

    No es variable con el concepto que se tiene de ella en la programacin habitual. En Prolog, una

    variable representa el valor de un tomo. Representan objetos que el mismo PROLOG determina.

    Una variable puede estar instanciada no instanciada. Estar instanciada cuando existe un objeto

    determinado representado por la variable. Los nombres de variables comienzan siempre por una

    letra mayscula.

    Un caso particular es la variable annima, representada por el carcter subrayado ("_"). Es una

    especie de comodn que utilizaremos en aquellos lugares que debera aparecer una variable, pero

    no nos interesa darle un nombre concreto ya que no vamos a utilizarla posteriormente.

    Reglas

    Las reglas se utilizan en PROLOG para significar que un hecho depende de uno mas hechos. Son

    la representacin de las implicaciones lgicas del tipo p ---> q (p implica q).

    Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".

    La cabeza est formada por un nico hecho.

    El cuerpo puede ser uno mas hechos (conjuncin de hechos), separados por una coma

    (","), que acta como el "y" lgico.

    Las reglas finalizan con un punto (".").

    La cabeza en una regla PROLOG corresponde al consecuente de una implicacin lgica, y el cuerpo

    al antecedente. Este hecho puede conducir a errores de representacin. Supongamos el siguiente

    razonamiento lgico: tiempo(lluvioso) ----> suelo(mojado) suelo(mojado)

    Que el suelo est, mojado, es una condicin suficiente de que el tiempo sea lluvioso, pero no

    necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicacin, que

    est, lloviendo (pueden haber regado las calles). La representacin correcta en PROLOG, sera:

    suelo(mojado):- tiempo(lluvioso). suelo(mojado).

    Advirtase que la regla est "al revs". Esto es as por el mecanismo de deduccin hacia atrs que

    emplea PROLOG. Si cometiramos el error de representarla como:

    tiempo(lluvioso):- suelo(mojado). suelo(mojado).

    PROLOG, partiendo del hecho de que el suelo est mojado, deducira incorrectamente que el

    tiempo es lluvioso. Para generalizar una relacin entre objetos mediante una regla, utilizaremos

    variables. Por ejemplo:

    Representacin lgica Representacin PROLOG es_un_coche(X) ----> tiene(X,ruedas)

    tiene(X,ruedas):- es_un_coche(X).

  • Programacion Lgica y Funcional Unidad Pinal de Amoles

    7

    J o s L u i s P r e z O r t e g a

    Pgina 7

    Con esta regla generalizamos el hecho de que cualquier objeto que sea un coche, tendr ruedas.

    Al igual que antes, el hecho de que un objeto tenga ruedas, no es una condicin suficiente de que

    sea un coche. Por lo tanto la representacin inversa sera incorrecta.