13
MINISTERIO DE EDUCACIÓN INSTITUTO TECNOLÓGICO BARÚ ODERAY CUBILLA GUILLERMO SALAZAR KRYSTHELLE AGUILAR 12. ºCOMERCIO ARELIS DE LEÓN PROGRAMACIÓN PROGRAMACIÓN LÓGICA 16/07/12

krysthelle.weebly.com · Web viewPROGRAMACIÓN PROGRAMACIÓN LÓGICA 16/07/12 Introducción En este trabajo hecho con esfuerzo y dedicación se destacarán los puntos de la programación

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

MINISTERIO DE EDUCACIÓN

INSTITUTO TECNOLÓGICO BARÚ

ODERAY CUBILLA

GUILLERMO SALAZAR

KRYSTHELLE AGUILAR

12. ºCOMERCIO

ARELIS DE LEÓN

PROGRAMACIÓN

PROGRAMACIÓN LÓGICA

16/07/12

Introducción

En este trabajo hecho con esfuerzo y dedicación se destacarán los puntos de la programación lógica. Durante la parte de programación funcional vamos a hablar sobre Haskell. La programación funcional está constituida mediante definición de funciones puramente matemáticas. Está basado en un modelo matemático :el lambda-cálculo. A diferencia de Prolog , el objeto básico aquí es la función. Esta vez nos enfrentamos a un lenguaje tipiado y polimórfico además de poseer funciones de orden superior. Esperamos que aprendas más.

Lee, instruye y aprende.

Programación lógica

La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los su paradigmas de programación dentro de la programación declarativa son: programación funcional, programación con restricciones, programas DSL (de dominio específico) e híbridos.

La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático.

Históricamente, los ordenadores se han programado utilizando lenguajes muy cercanos a las peculiaridades de la propia máquina: operaciones aritméticas simples, instrucciones de acceso a memoria, etc. Un programa escrito de esta manera puede ocultar totalmente su propósito a la comprensión de un ser humano, incluso uno entrenado. Hoy día, estos lenguajes pertenecientes al paradigma de la Programación imperativa han evolucionado de manera que ya no son tan crípticos.

En cambio, la lógica matemática es la manera más sencilla, para el intelecto humano, de expresar formalmente problemas complejos y de resolverlos mediante la aplicación de reglas, hipótesis y teoremas. De ahí que el concepto de "programación lógica" resulte atractivo en diversos campos donde la programación tradicional es un fracaso.

En sus inicios la actividad de la computadora estuvo limitada exclusivamente al cálculo numérico. Si bien es cierto que las

Máquinas fueron construidas principalmente para realizar operaciones aritméticas, ellas son capaces de ejecutar tareas no numéricas, como resolver problemas “lógicos”.

En realidad la computadora está dotada para procesar “símbolos”, el que estos fuesen utilizados como numéricos no fue mas que un hecho circunstancial.

Los primeros en comprender esta idea fueron los investigadores de la Inteligencia Artificial, especialmente el trío NeweLL, Show y Simon con su “logic theorist”. Este programa podía demostrar teoremas del cálculo proposicional y sentó las bases sobre las posibilidades de las computadoras para la manipulación de símbolos (no numéricos) y el tratamiento de estructuras de datos en forma de <>.

Siguiendo estas ideas John Mac Carthy a principio de los años 60 desarrollo el lenguaje LISP, primer lenguaje que rompió con los esquemas convencionales de programación.

El LISP utiliza el tratamiento simbólico de la información representadas por listas, es el primer lenguaje que no hace diferenciación entre datos e instrucciones y se le considera el pionero de los lenguajes funcionales por su método de trabajo, similar a la resolución de funciones matemáticas

Los conocimientos se dan en forma declarativa, sin indicar el modo de empleo, ni donde, ni cuando utilizarlos

Los conocimientos son representados en forma de regla del tipo antecedente consecuente. Donde en el antecedente viene la descripción de un hecho y en el consecuente la acción a ejecutar la cual produce nuevos hechos (cambios en la memoria de trabajo). Por su puesto que es más cómodo proporcionar a un sistema conocimientos en forma declarativa, ya que podemos dárselo en cualquier momento, suprimirlos o modificarlos con facilidad.

En los comienzos de los años 70 el francés Alain Colmenear desarrolló el lenguaje PROLOG que también permite el desarrollo de aplicaciones en forma declarativa.

En general el PROLOG es un demostrador automático de problema, el cual utiliza una Base de Conocimientos en forma de reglas de inferencia deductivas (cláusulas de Horn), es decir sus reglas tienen como consecuente una única acción y la inferencias obte¬nidas son estrictamente lógicas (verdaderas o falsas), aunque puede parecer una limitación, esto no es totalmente justo, ya que PROLOG permite programar mecanismos inferenciales con lógica probabilísticas, dado que se trata de búsquedas en árboles con acumulación de evidencias.

Analicemos el clásico ejemplo sobre Sócrates.

Todos los hombres son mortales

Sócrates es hombre

Sócrates es mortal

Su representación lógica será

Para todo X hombre(X) => mortal(X)

Existe Sócrates y hombre (Sócrates)

Entonces mortal (Sócrates)

En PROLOG sería.

Hombre (Sócrates) < –

Mortal(x) < — hombre(x)

? <– mortal (Sócrates)

También es posible definir una regla abuelo como sigue:

Abuelo (x,y) < — Padre (x,z) Padre (y,z)

y entonces la pregunta se reduciría a

? <– Abuelo (x,y)

El resultado a imprimir sería Juan, José.

Otra posibilidad sería saber de quién es abuelo Juan.

? <– Abuelo (Juan,x)

La regla anterior “Abuelo” está limitada a Abuelo por parte de padre, en PROLOG basta modificar la regla Abuelo y agregarlas reglas progenitor como sigue:

Abuelo (x,y) < — Padre (x,z) Progenitor (y,z)

Progenitor (x,y) <– Padre (x,y)

Progenitor (x,y) <– Madre (x,y)

De igual forma se puede agregar las reglas Tío, Hermano, Sobrino, Hijo etc., sin necesidad de alterar el programa.

Programando en Prolog

A la hora de programar en Prolog tenemos dos cuerpos principales: la especificación de los hechos y las preguntas sobre esos objetos o relaciones. Cuando creamos nuestra base de datos con esa especificación de hechos podemos poneros a hacer preguntas sobre esa especificación dando como resultado sí o no. Prolog saca la respuesta explorando cada uno de los hechos introducidos en la base de datos hasta encontrar uno que coincida, que será el caso en la que la respuesta será afirmativa, o hasta que termine toda la base de datos, cuyo caso dará una respuesta negativa. Las preguntas que hacemos sobre la base de hechos pueden ser más complejas usando operadores lógicos como AND,OR y NOT. En este caso, Prolog busca que la satisfacción a la primera parte de la pregunta y si lo es, lo busca en la segunda.

A la hora de ponernos a trabajar con Prolog necesitaremos un compilar o intérprete para este lenguaje. El más común y usado es el SWI-PROLOG que lo podemos encontrar tanto bajo Windows como y Linux y MacOS

Motivación

Históricamente, los ordenadores se han programado utilizando lenguajes muy cercanos a las peculiaridades de la propia máquina: operaciones aritméticas simples, instrucciones de acceso a memoria, etc. Un programa escrito de esta manera puede ocultar totalmente su propósito a la comprensión de un ser humano, incluso uno entrenado. Hoy día, estos lenguajes pertenecientes al paradigma de la Programación imperativa han evolucionado de manera que ya no son tan crípticos.

En cambio, la lógica matemática es la manera más sencilla, para el intelecto humano, de expresar formalmente problemas complejos y de resolverlos mediante la aplicación de reglas, hipótesis y teoremas. De ahí que el concepto de "programación lógica" resulte atractivo en diversos campos donde la programación tradicional es un fracaso.

Fundamentos

La mayoría de los lenguajes de programación lógica se basan en la teoría lógica de primer orden, aunque también incorporan algunos comportamientos de orden superior como la lógica difusa.

En este sentido, destacan los lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es demostradamente computable (hasta el momento).

CONCLUSIÓN

ESPERAMOS QUE HAYAS APRENDIDO MÁS SOBRE LA PROGRAMACIÓN LÓGICA Y LO QUE LA COMPONE.

HICIMOS ESTE TRABAJO PARA LA SATISFACCIÓN DEL LECTOR Y SUS NECESIDADES.ESPERAMOS QUE HAYA SIDO DE EFICACIA.