Prólogo (lenguaje de programación)

Prólogo
clase de idioma programación lógica
Apareció en 1972
Autor Alain Colmeroe
extensión de archivo .pl, .proo.P
Implementaciones principales B-Prolog , Ciao , ECLiPSe , GNU Prolog , Logic Programming Associates , Poplog Prolog, P# , Quintus, SICStus , Strawberry , SWI- Prolog , tuProlog , XSB , YAP-Prolog
Dialectos Prólogo ISO, Prólogo de Edimburgo, Prólogo Turbo, Prólogo visual
sido influenciado planificador
influenciado Prólogo visual , Mercurio , Oz , Erlang , Strand , KL0 , KL1 , Registro de datos

Prolog ( ing.  Prolog ) es un lenguaje y sistema de programación lógica basado en el lenguaje de predicados de la lógica matemática de las cláusulas de Horn , que es un subconjunto de la lógica de predicados de primer orden .

El lenguaje se centra en un pequeño conjunto de mecanismos básicos, que incluyen la coincidencia de patrones , la representación en árbol de las estructuras de datos y el retroceso automático. Muy adecuado para resolver problemas donde se consideran objetos (en particular, objetos estructurados) y las relaciones entre ellos. Prolog, por sus peculiaridades, se utiliza en el campo de la inteligencia artificial, la lingüística computacional y la programación no numérica en general. En algunos casos, la implementación de cálculos simbólicos en otros lenguajes estándar hace que sea necesario crear una gran cantidad de código que es difícil de entender, mientras que la implementación de los mismos algoritmos en Prolog brinda un programa simple que cabe fácilmente en una página. .

Prolog es un lenguaje de programación declarativo : la lógica de un programa se expresa en términos de relaciones representadas como hechos y reglas. Para iniciar los cálculos, se realiza una solicitud especial a la base de conocimientos , a la que el sistema de programación lógica genera respuestas verdaderas y falsas. Para consultas generalizadas con variables como argumentos, el sistema Prolog creado genera datos específicos para confirmar la veracidad de la información generalizada y las reglas de inferencia.

En otras palabras, un predicado se puede definir como una función que asigna un conjunto de naturaleza arbitraria a un conjunto de valores booleanos {ложно, истинно} . La tarea del programa prolog es probar si una declaración de objetivo dada es una consecuencia de los hechos y reglas dados.

Desarrollo

El comienzo de la historia de la lengua se remonta a la década de 1970. [1] Al ser un lenguaje de programación declarativo , Prolog percibe como programa alguna descripción de una tarea o bases de conocimiento y en sí mismo produce una conclusión lógica, así como una búsqueda de solución a problemas, utilizando el mecanismo de búsqueda con retroceso y unificación .

El interés por el Prólogo subió y bajó unas cuantas veces, el entusiasmo fue reemplazado por un fuerte rechazo. El interés en Prolog como el lenguaje del futuro se elevó al más alto nivel durante el desarrollo del programa informático nacional de quinta generación de Japón en la década de 1980, cuando los desarrolladores esperaban que con Prolog sería posible formular nuevos principios que conducirían a una mayor computadoras nivel de inteligencia.

El lenguaje Prolog en la década de 1980 se incluyó en varios libros de texto universitarios y escolares soviéticos sobre informática para estudiar los elementos de la lógica matemática, los principios de la programación lógica y el diseño de bases de conocimiento y modelos de sistemas expertos . Para este propósito, se implementaron intérpretes educativos de Prolog en ruso en la PC de IBM y en varias computadoras escolares soviéticas.

En Prolog, los hechos se describen en forma de predicados lógicos con valores concretos. Las reglas de inferencia se describen mediante predicados lógicos con la definición de reglas de inferencia lógica en forma de lista de predicados sobre bases de conocimiento y procedimientos de procesamiento de información.

Actualmente, Prolog, a pesar de repetidos pronósticos pesimistas, sigue desarrollándose en diferentes países e incorpora nuevas tecnologías y conceptos, así como paradigmas de programación imperativos . En particular, una de las áreas de desarrollo del lenguaje (incluso en Rusia ) implementa el concepto de agentes inteligentes .

Multiplataforma

Prolog se ha implementado para casi todos los sistemas operativos (SO) y plataformas conocidos (incluidos Java y .NET ). Los sistemas operativos incluyen: sistema operativo central , toda la familia Unix , Windows , sistema operativo para plataformas móviles.

Arquitectura

Muchas implementaciones modernas del lenguaje tienen una extensión interna debido a la arquitectura OOP . Además de las soluciones que no son gratuitas , también existen implementaciones gratuitas de Prolog. En 1996 se adoptó la norma ISO , denominada ISO/IEC JTC1/SC22/WG17.

El principio básico del lenguaje es la equivalencia de la representación del programa y los datos (declaratividad), por lo que los enunciados del lenguaje son tanto registros, similares a los registros en una base de datos, como reglas que llevan las formas de procesarlos. La combinación de estas cualidades conduce al hecho de que a medida que funciona el sistema Prolog, el conocimiento (tanto datos como reglas) se acumula. Por lo tanto, los sistemas Prolog se consideran un entorno natural para acumular una base de conocimientos y enseñar a estudiantes y escolares los principios de la programación lógica.

Sintaxis

Los conceptos básicos en el lenguaje Prolog son hechos, reglas de inferencia y consultas que le permiten describir bases de conocimiento , procedimientos de inferencia y toma de decisiones. La programación lógica, tal como se implementa en Prologue, usa solo una regla de inferencia, resolución .

En Prolog, el conjunto inicial de fórmulas para las que se busca un resolvente vacío se representa en forma de las denominadas " cláusulas Horn ":

Baños

Un programa Prolog describe relaciones definidas por cláusulas. Como en cualquier otro lenguaje informático simbólico , las oraciones se construyen a partir de términos, que a su vez se subdividen en átomos, números, variables y estructuras. Un átomo se escribe con una letra minúscula o entre comillas cuando se requiere una letra mayúscula.

átomo 'átomo'

Las variables en mayúsculas son diferentes de las variables en los lenguajes de programación de procedimientos, no están asociadas con una ubicación de memoria específica, sino más cerca de una variable matemática.

X es 2 + 2.

Las estructuras son colecciones de términos encerrados entre paréntesis, incluidas otras estructuras. Una estructura se denota por un nombre (funtor) que aparece antes de los paréntesis.

libro ( 'Título' , '2009' , 'Espa' , autores ( 'Primer autor' , 'Segundo autor' ) ).

Las listas son otra construcción, cuyos elementos están encerrados entre corchetes. Las listas en Prolog se basan en listas enlazadas .

Lista = [ a , b , [ c , d ], e ].

Reglas

Las reglas en Prolog están escritas en forma de reglas de inferencia con conclusiones lógicas y una lista de condiciones lógicas. En Prolog puro, las oraciones se limitan a las cláusulas Horn :

Conclusión : - Condición .

y se leen así: "El encabezado es VERDADERO si el cuerpo es VERDADERO". El cuerpo de la regla contiene referencias a predicados, que se denominan objetivos de la regla.

Predicados incorporados ,/2 Significado: Un operador con dos argumentos. Define una conjunción de objetivos. ;/2 El operador define la disyunción.

Hechos

Los hechos en Prolog se describen mediante predicados lógicos con valores concretos. Los hechos en las bases de conocimiento de Prolog representan información específica (conocimiento). La información y el conocimiento generalizados en el lenguaje Prolog se definen mediante reglas de inferencia lógica (definiciones) y conjuntos de tales reglas de inferencia (definiciones) sobre hechos específicos e información generalizada. Las oraciones con un cuerpo vacío se llaman hechos . Ejemplo de hecho:

Gato ( Iván ).

Este hecho es equivalente a la regla:

Gato ( Iván ) : -CIERTO .

Crítica

Prolog es criticado, en primer lugar, por su naturaleza declarativa incompleta: es casi imposible crear programas Prolog complejos y prácticamente útiles en un estilo completamente declarativo, el programador se ve obligado a recurrir a técnicas de procedimiento, lo que conduce a un fuerte aumento en la complejidad de crear y depurar programas, así como la escasa controlabilidad de los resultados intermedios. [2]

Otra propiedad del lenguaje a menudo criticada es la falta de escritura (mientras que Visual Prolog [3]  , una de las extensiones del lenguaje orientadas a objetos, implementa una escritura fuerte que, sin embargo, reduce la flexibilidad de Prolog).

El lenguaje predetermina el orden de recorrido del árbol de decisión "en profundidad" y estandariza operadores que permiten intervenir en este proceso (como el operador de corte !o de bifurcación ->). Esta arquitectura dificulta la paralelización automática de programas, lo que permitiría utilizar varios procesadores o nodos de red en la búsqueda de una solución.

Ejemplos

hola mundo

?- escribe ( '¡Hola mundo!' ), nl . hola mundo ! cierto _ ?-

hermano

padre ( "Tom" , "Jake" ). padre ( "Janna" , "Jack" ). padre ( "Tom" , "Tim" ). hombre ( "Tom" ). hombre ( "Tim" ). hombre ( "Jake" ). mujer ( "Janna" ). hermano ( X , Y ):- padre ( Z , X ), padre ( Z , Y ), hombre ( X ), hombre ( Y ), X \= Y .

Salida: (Jake, Tim) (Tim, Jake)

Mayor

mayores ( "Pedro" , "Iván" ). mayor ( "Vasily" , "Timofey" ). mayores ( "Timofey" , "Peter" ). mayor que ( X , Y ) :- mayor que ( X , Z ), mayor que ( Z , Y ). ? mayores ( "Timofey" , V ). ? mayor ( U , "Peter" ). ? mayor ( U , V ).

Conclusiones: 1. Timothy es mayor que Ivan 2. Vasily es mayor que Peter 3. Ivan es el menor; Vasily es el mayor; Timoteo es mayor que Pedro.

Véase también

  • Lisp  es un lenguaje de programación funcional.

Notas

  1. Historia del lenguaje Prolog (enlace descendente) . Consultado el 4 de septiembre de 2004. Archivado desde el original el 25 de noviembre de 2004. 
  2. Sebesta R.U. Conceptos básicos de lenguajes de programación \u003d Conceptos de lenguajes de programación. - 5ª ed. - M .: Williams , 2001. - ISBN 5-8459-0192-8 .
  3. Así como su predecesor directo Turbo Prolog

Literatura

  • Anatoly Adamenko, Andrei Kuchukov. Programación lógica y Visual Prolog (con CD). - San Petersburgo. : BHV-Petersburg , 2003. - 990 p. — ISBN 5-94157-156-9 .
  • Iván Bratko. Algoritmos de inteligencia artificial en el lenguaje PROLOG = Programación Prolog para Inteligencia Artificial. - M. : Williams , 2004. - 640 p. - ISBN 0-201-40375-7 .
  • Karpov Yu.G. Teoría de los autómatas. - San Petersburgo , 2003. - 206 p. — ISBN 5-318-00537-3 .
  • Markov VN Programación lógica moderna en Visual Prolog 7.5: libro de texto. - San Petersburgo: BHV-Petersburg, 2016. - 544 p. — ISBN 978-5-9775-3487-1
  • Mallas J. Lenguaje relacional Prólogo y su aplicación. — M. : Nauka, 1990. — 464 p. — ISBN 5-02-014509-2 .
Estándares

Enlaces