Kowalski (1972 [50], 1974 [51]) expuso por primera vez de manera clara la idea de la programación lógica. Pero en ella influyó de manera decisiva el trabajo de diseño de un lenguaje realizado por Colmerauer en Marsella (Colmerauer et al., 1973 [18]). En Marsella también se realizaron los primeros intérpretes de Prolog («Prolog I» y «Prolog II» ). La sintaxis ya establecida es la que introdujo Warren et al. (1977) [104] con el nombre de «sintaxis de Edimburgo» , más tarde normalizada por la I.S.O. (1996) [46]. Estos orígenes se detallan ampliamante en un artículo de Colmerauer y Roussel (1992) [19].
Es interesante observar que, como ocurre frecuentemente, hubo un fenómeno de convergencia histórica. La idea de la máquina lógica es separar el conocimiento sobre el dominio (expresado declarativamente en un lenguaje lógico), o normativo, del conocimiento de control. Esto queda claramente reflejado en el título de una artículo de Kowalsi (1979a) [52]: «Algoritmo = lógica + control» (imitando el de un libro clásico de Wirth: «Algoritmos + estructuras de datos = programas» ). Pues bien, por la misma época, pero de manera totalmente independiente, se desarrollaban las primeras ideas del «paradigma del sistema basado en conocimiento» (Apartado 1.2).
En 1981 apareció el primer intérprete de Prolog para ordenadores personales (en aquel tiempo, «microordenadores» , realizados con microprocesadores de ocho bits y con un sistema operativo llamado «CP/M» ): «micro-Prolog» (McCabe, 1981 [63]). Se utilizó en un proyecto educativo muy interesante: «La lógica como lenguaje de ordenadores para niños» (Ennals, 1984 [29]). Al mismo tiempo, en 1981, Prolog se adoptó como un elemento de partida para el proyecto japonés de «quinta generación» , lo que contribuyó a la difusión del lenguaje.
La programación lógica progresó lentamente en dos frentes: en productos comerciales (intérpretes, compiladores y entornos de programación) y programas libres cada vez más eficientes y, en el marco de la investigación, en arquitecturas de máquinas «no convencionales» (con procesamiento en paralelo) en busca del «ideal de la máquina lógica» . Un impulso renovador se produjo con la idea de ampliar su alcance mediante la introducción de construcciones para resolver problemas de satisfacción de restricciones (Jaffar y Lassez, 1987 [47]), y, más recientemente, con su integración en las metodologías de orientación a objetos (Moura, 2004 [68]). En la la página http://www.cetus-links.org/oo_prolog.html se encuentran muchas referencias y enlaces.
La programación lógica implica un «estilo» de programación radicalmente distinto al de la programación «tradicional» (procedimental, o imperativa). Se suele advertir que a una persona que ya tenga alguna experiencia en programación le resulta más difícil captar este estilo que a otra que carezca de ella. No existen sentencias de bucle («repeat» , «while» , «for» ), ni sentencias «if...then...» ni «case» , ni siquiera sentencias de asignación. Como elementos nuevos, no presentes en los lenguajes tradicionales, se dispone de la posibilidad de:
Las categorías sintácticas principales en Prolog son los términos, los predicados, las reglas y las consultas. Veamos (informalmente) su sintaxis y, paralelamente, la semántica asociada.