Prolog
Prolog (PROLOG), proveniente del francés PROgrammation en LOGique,1 es un lenguaje de programación lógico e interpretado usado habitualmente en el campo de la Inteligencia artificial.
Prolog es un lenguaje de programación declarativo que se utiliza para resolver problemas en los que existen objetos y las relaciones entre ellos.
Los lenguajes declarativos se diferencian de los lenguajes imperativos en que están basados en formalismos abstractos (Prolog tiene sus fundamentos en la lógica de predicados o de primer orden), por lo tanto su semántica no depende de la máquina en la que se ejecutan.
Busca obtener conocimiento declarando hechos sobre los objetos y sus relaciones, creando reglas sobre dichos objetos y relaciones y realizando preguntas en ese dominio. Está basado en los siguientes mecanismos básicos: unificación, estructuras de datos basadas en árboles y backtracking.
Los programas en Prolog son programas lógicos definidos, este se basa en un conocimiento base para solucionar consultas así como inferir información y el conocimiento lo representamos mediante cláusulas de Horn positivas. Las cláusulas son hechos o reglas , están compuestas usualmente de predicados.
La mayoría de los programas Prolog están organizados en cuatro secciones principales:
Dominio: donde se declaran los argumentos que utilizarán los predicados.
Predicados: donde se declaran todos los predicados no predefinidos que se utilizarán en las siguientes secciones.
Objetivos: esta sección permite ejecutar los programas de forma no interactiva, y por tanto, buscará la solución deseada tan pronto como se ejecute el programa. Como también es habitual usar Prolog de forma interactiva es frecuente ejecutar un programa y luego esperar a que se nos pregunte por los objetivos.
Clausulas: donde se escriben los hechos y las reglas que conocemos del dominio.
sudo add-apt-repository ppa:swi-prolog/stable
sudo apt-get update
sudo apt-get install swi-prolog -y
swipl -s programa.pl
Entrar al Shell
$ swipl
?- True.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
?- False.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
?-
?- 5 is 3+2
true
? 6 is 3*3
false
?- [saber].
true.
?- sabe(luis,X,Y).
X = ingles,
Y = 5 ;
X = chino,
Y = 2.
?- sabe(marta,X,Y).
X = ruso,
Y = 3 ;
X = chino,
Y = 5.
?- sabe(luis,chino,X).
X = 2.
?- sabe(marta,chino,X).
X = 5.
?- sabe(luis,frances,X).
false.
?- sabe(marta,aleman,Y).
false.
?- halt. % terminar sesión
# Crear ejecutable de Proglog
swipl -o nombre_de_ejecutable -g funcion_principal -c programa.pl
Enlaces