PDF de programación - Prolog - Programación Lógica: Introducción y Sintaxis Básica

Imágen de pdf Prolog - Programación Lógica: Introducción y Sintaxis Básica

Prolog - Programación Lógica: Introducción y Sintaxis Básicagráfica de visualizaciones

Publicado el 3 de Diciembre del 2019
108 visualizaciones desde el 3 de Diciembre del 2019
56,8 KB
4 paginas
Creado hace 12a (27/03/2007)
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
emacs(nombre_fichero):
:- emacs.
:- emacs(pract1).

lanzar el objetivo: emacs. o

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

Reales

Átomos alfanuméricos

Enteros de 32bits con signo.
0 1 9821 -10 –64320
Números reales, admiten formato científico.
1.0 246.8 -12.3 20.002e-10 -3.3e20
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
Secuencia de símbolos, y caracteres con ASCII > 127. Caracteres simbólicos son: #
$ & = - ^ ~ \ @ ` : . / + * ? < >
Ej: & &: ++ << >> <- .. *-/*
Secuencia de caracteres entre comillas simples (' '). La secuencia ñnn 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>)

Átomos simbólicos

Átomos literales

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:


Los objetivos así planteados se diferencian de los objetivos planteados directamente desde la consola en
dos aspectos:

:- abuelo(X,Y).
:- write('Hola Mundo!'),nl.

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)

| ?- abuelo(X,Y).
| ?- write('Hola Mundo!'),nl.

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:

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
  • Links de descarga
http://lwp-l.com/pdf16998

Comentarios de: Prolog - Programación Lógica: Introducción y Sintaxis Básica (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad