Programacin Prolog

Anuncio
Introducción a la Lógica, Curso 2006/2007
Programación Lógica: Introducción y Sintaxis Básica
Prolog
Prolog es un lenguaje declarativo e interpretado. Esto quiere decir que el lenguaje se usa para representar
conocimientos sobre un determinado dominio y las relaciones entre objetos de ese dominio. A partir de
ese conocimiento, el propio sistema deduce respuestas a cuestiones que se le planteen, es decir, realiza
una inferencia.
El dominio lo constituyen un conjunto de objetos y el conocimiento se formaliza mediante un conjunto de
relaciones (reglas) que describen de forma simultánea propiedades de los objetos y sus interacciones. Por
tanto, escribir un programa de Prolog consiste en declarar el conocimiento disponible acerca de:
•
Objetos: tanto sus propiedades (por ejemplo, X es par, X es un hombre) como las relaciones
entre ellos (por ejemplo, X es múltiplo de Y, X es padre de Y).
•
Reglas: determinan interacciones lógicas entre los objetos, del tipo “si ocurren q y r, entonces
ocurre p”.
La ventaja de este tipo de lenguaje frente a lenguajes procedimentales (como Java) es que no hay que
preocuparse de cómo resolver algo; la desventaja es que la resolución automática no siempre es eficiente.
SWI Prolog
La sintaxis empleada en SWI-Prolog v5.2 sigue tanto el estándar de tipo Edimburgo como el
ISO-Standar. Esta herramienta, aparte de proporcionar un entorno de trabajo en el que se permiten
interpretar programas Prolog también incluye opciones de compilación pudiendo generar un ejecutable
independiente, así como la posibilidad de combinar Prolog con lenguaje C mediante un potente interfaz
bidireccional que permite generar ejecutables tanto desde C como desde Prolog incorporando código en
ambos lenguajes. SWI-Prolog proporciona un entorno de desarrollo en Prolog multiplataforma (Windows
y Linux, entre otros) y además gratuito, disponible en su página web: http://www.swi-prolog.org .
Entorno de trabajo
El entorno de trabajo está formado por diversos módulos. En primer lugar la ventana principal que es la
consola que actúa como intérprete de comandos. Permite plantear, mediante el prompt, consultas (goals)
al sistema. En ella se presentan las soluciones a los objetivos planteados, los errores de compilación y
permite introducir cualquier comando en Prolog. Para la edición de los documentos proporciona una
versión del editor Emacs.
Edición de programas
Proporciona una versión de Emacs, para activarlo deberemos lanzar el objetivo: emacs. o
emacs(nombre_fichero):
:- emacs.
:- emacs(pract1).
1/4
Introducción a la Lógica, Curso 2006/2007
Este editor es sensible a contexto con lo que nos resaltará la sintaxis de nuestro código fuente, y nos
facilitará darle formato con opciones de sangrado automático. Desde este editor podremos no sólo editar,
sino también compilar y lanzar el depurador de código. Todo ello a través de sus opciones de menú.
Para editar un archivo ya existente utilizamos la opción File| Find file. Los programas en código fuente
de Prolog vienen en archivos de texto (con extensión .pl) en formato ASCII.
Sintaxis (Básica)
Acabamos ver que SWI-Prolog trabaja con archivos de texto en formato ASCII. Cada archivo contiene
un programa o un módulo de sentencias Prolog. La composición básica de un programa Prolog viene
dada por dos secciones, ambas opcionales:
•
Cláusulas : Cláusulas definidas del programa (hechos y reglas)
•
Comandos : Objetivos a plantear al sistema
Veamos con más detalle cada una de ellas.
Cláusulas
Las cláusulas del programa constan de los hechos y las reglas, terminados con un punto cada uno. Los
predicados no se declaran, con lo que los tipos de sus argumentos pueden variar de una invocación a otra.
Obviamente si se emplean operadores propios de un tipo de datos (por ejemplo, aritméticos) sobre otro
tipo (constantes simbólicas en vez de números) se producirá un error de ejecución.
Sintaxis:
Hechos: nombre_predicado(arg1,… , argn).
Reglas: nombre_predicado(arg1,…,argn):− pred1(...),...,predm(...).
NOTA: Los hechos y reglas con el mismo nombre deben de ir correlativos en el programa.
NOTA2: No puede haber espacios entre el nombre de predicado y el carácter ‘(‘.
Comentarios:
/*
comentarios tipo C
*/
% comentario de una línea
Dominios (tipos) de argumentos
Los principales dominios reconocidos por SWI-Prolog son:
Enteros
Enteros de 32bits con signo.
0 1 9821 -10 –64320
Reales
Números reales, admiten formato científico.
1.0 246.8 -12.3 20.002e-10 -3.3e20
Átomos alfanuméricos
Comienza con una letra (a-z) minúscula seguido por una secuencia de cero o más
caracteres alfabéticos (A-Z,a-z) o (_).
2/4
Introducción a la Lógica, Curso 2006/2007
Ej: manzana a1 caso_1 tarta_de_manzana miCasa
Átomos simbólicos
Secuencia de símbolos, y caracteres con ASCII > 127. Caracteres simbólicos son: #
$ & = - ^ ~ \ @ ` : . / + * ? < >
Ej: & &: ++ << >> <- .. *-/*
Átomos literales
Secuencia de caracteres entre comillas simples (' '). La secuencia ~nnn representa el
carácter con código ASCII nnn. ~I, representa ctrl-I.
Para insertar un ' en un átomo se introducen dos ' seguidos.
Ej:'Manzana' '123' 'hola mundo'
'~Ihol~065~M~J'(<tab>hola<CR><LF>)
Variables
Las variables son cadenas alfanuméricas cuyo primer carácter es una letra mayúscula o el guión de
subrayado ‘_’.
ej: X, A, Titulo, _Sys01, Temperatura, Altura.
Comandos
Un comando es un Goal (objetivo) de la forma:
:- goal1,…, goaln.
% n>=1
Cuando el intérprete se encuentra con un objetivo durante la compilación, éste es ejecutado
inmediatamente.
Ej:
:- abuelo(X,Y).
:- write('Hola Mundo!'),nl.
Los objetivos así planteados se diferencian de los objetivos planteados directamente desde la consola en
dos aspectos:
1.
Prolog busca sólo la primera solución para ellos.
2.
Prolog no muestra el resultado de resolver estos objetivos.
Compilación
Para poder plantear un objetivo es necesario compilar previamente el programa Prolog. Además,
debemos compilar cada vez que introducimos algún cambio o corrección en el código fuente. Para ello
seleccionamos la opción de compilación Compile|Compile buffer.
Como resultado de la compilación:
•
Si no hubo errores se nos muestra en la consola el mensaje:
% path_absoluto/de/nombre.pl compiled X sec, N bytes
| ?-
3/4
Introducción a la Lógica, Curso 2006/2007
•
Si se detecta algún error se muestra un cuadro de mensaje con la lista de errores encontrados. Cada
elemento de la lista es un enlace a la posición del programa donde se identificó el error, a la que
accederemos directamente por medio de un doble clic.
También es posible cargar las definiciones de un archivo .pl en memoria desde la consola por medio del
predicado consult(archivo.pl) o la opción File|Consult.
Consulta de Objetivos (GOALS)
Una vez compiladas las cláusulas del programa, podemos pasar a plantear preguntas (goals) al sistema.
Para ello basta con introducir en el prompt de la consola los objetivos que queramos plantear.
Ej:
| ?- abuelo(X,Y).
| ?- write('Hola Mundo!'),nl.
Si un objetivo tiene más de una solución, Prolog nos muestra la primera y espera que pulsemos una tecla.
Si pulsamos la tecla ‘n’ (Next) nos mostrará la siguiente, si pulsamos <space> no buscará más
soluciones. Para interrumpir la evaluación de un objetivo basta con pulsar la combinación <Crtl>+C y
luego a (Abort).
Ayuda en Línea
La opción del menú Help|Online Manual nos muestra la ayuda en línea del SWI-Prolog. Contiene
información de referencia de los predicados predefinidos, errores y mensajes del sistema de ventanas.
4/4
Descargar