LOGOSJUNTOS.gif (3585 bytes)   

UNIVERSIDAD DE LOS ANDES 

COORDINACION GENERAL DE ESTUDIOS INTERACTIVOS A  DISTANCIA

MERIDA - VENEZUELA

 



 

              wpe1.jpg (1485 bytes)

             wpe2.jpg (2265 bytes)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Curso de Lógica y Matemática

 

    Postgrado en Computación                                        

    Postgrado en Modelado y Simulación de Sistemas      


ANTERIOR

PRINCIPAL

SIGUIENTE

 

  MANUAL de PROLOG - BRATKO

   

PRIMEROS PASOS EN PROLOG  

 

         En este capítulo revisaremos unos pocos ejemplos para ilustrar las ideas básicas detrás de la programación en PROLOG. Pero primero, unas notas acerca de como usar Sistemas PROLOG.

        Un programa PROLOG es un conjunto de procedimientos (el orden es indiferente). Cada procedimiento consiste de una o más cláusulas (ahora, el orden de las cláusulas si es importante). Hay dos tipos de cláusulas: hechos y reglas. El programa es almacenado en una base de conocimiento PROLOG. Usualmente cargas un programa dentro de la base de datos usando el comando consult, en la concha PROLOG, en la siguiente forma:

 
? consult(‘Nombre_Del_archivo_Con_El_Programa’).
 
El comando consult agrega las cláusulas y hechos desde el archivo texto especificado a las cláusulas y hechos ya almacenados en la base de datos. Así puedes cargar más programas dentro de la base de datos a la vez, pero debes ser cuidadoso si los programas no usan los procedimientos con el mismo nombre. De otra manera, debido a la acumulación de cláusulas, esos procedimientos podrían comportarse incorrectamente.
Otra forma de invocar este mismo comando es con la notacion de listas:
? [‘Nombre_Del_archivo_Con_El_Programa’].
 

Puedes también usar el comando reconsult para recargar un programa.

 

? reconsult('Nombre_Del_Archivo_Con_El_Programa').

         Este comando se comporta igual al comando consult (agrega procedimientos dentro de la base de datos) pero si hay un procedimiento en la base de datos con el mismo nombre de algún procedimiento en el archivo reconsultado, entonces el primer procedimiento es reemplazado por la nueva definición. Puedes usar el comando reconsult para cambiar un programa en la base de datos durante la depuración.

          El programa PROLOG es ejecutado invocando algún procedimiento del programa de la siguiente forma:

 

? nombre_Del_Procedimiento(parámetros).

Nota que tu ya has llamado un procedimiento cuando tu consultastes o reconsultastes el archivo. "Llamar un procedimiento" es equivalente a "preguntando una pregunta" en PROLOG.

 

 

BASE DE DATOS GENEALÓGICA

 

      Una base de datos genealógica puede ser una buena introducción a PROLOG , pués no es exactamente un conjunto de procedimientos  y tiene más elementos que una base de datos común. En ésta lección , presentamos un programa de PROLOG simple que captura relaciones de familia básicas. El programa demuestra algunas de las características de PROLOG como el usar hechos , reglas , variables y la recursión.

 

Primero, expresamos la propiedad de ser un hombre o mujer usando hechos de PROLOG:

 

hombre(adan).
hombre(pedro).
hombre(paul).
 
mujer(maria).
mujer(eva).
 

Ahora podemos agregar la relación "pariente" el cual asocia pariente y niño:

 

pariente(adan,pedro). % Significa adan es   
                        pariente de pedro.
pariente(eva,pedro).
pariente(adan,paul).
pariente(marry,paul).

       

Hasta ahora, hemos agregado sólo hechos a nuestro programa. Pero el poder real de PROLOG está en las reglas. Mientras que los hechos afirman la relación explícitamente, las reglas definen la relación en una forma más general. Cada regla tiene su cabeza (nombre de la relación definida), y su cuerpo (las condiciones de definición de la relación). Las siguientes reglas definen las relaciones de ser un padre y ser una madre usando las relaciones definidas previamente de ser un hombre o mujer y ser un pariente.

 

  padre(F,C) :-hombre(F), pariente(F,C).

  madre(M,C) :- mujer(M), pariente(M,C).

 

Notar que usamos variables (comienzan con mayúscula) para expresar la característica que cada hombre el cual es un pariente de cualquier niño es también su padre. Si algún parámetro de la relación no es importante podemos usar variables anónimas (denotadas _) como en esas definiciones:

 

  es_padre(F) :- padre(F,_).

  es_madre(M) :- madre(M,_).

Antes de avanzar más, uno debería saber como ejecutar los programas PROLOG. Tu ejecutas el programa haciendo preguntas como ésta:

 

?-padre(X,paul).

 

La cual expresa: ¿Quién es padre de Paul? (Estrictamente hablando la frase pregunta si existe "algo" que sea el padre de Paul).  La respuesta es X=adan, según nuestro programa anterior.

 

Ahora extenderemos la base de datos de hechos y trataremos de definir otras relaciones de familia como ser un hijo, tío o abuelo. También, trataremos de preguntar al sistema PROLOG diversas preguntas para ver que sucede. Tu puedes comparar tu propio programa con las siguientes reglas:

 

hijo(S,P):-hombre(S),pariente(P,S).

hija(D,P):-mujer(D),pariente(P,D).

 

hermanos(A,B):-pariente(P,A), pariente(P,B), A\=B.

% hermanos tienen al menos un pariente común

% la prueba A\=B preserva que hermanos son personas diferentes.

 

hermanos_completos(A,B):-

pariente(A,F),pariente(B,F),

pariente(A,M),pariente(B,M),

A\=B, F\=M.

 

% hermanos completos tienen parientes comunes (ambos)

% la prueba F\=M preserva que hermanos completos tienen dos diferentes parientes(padre y madre,naturalmente)

 

hermanos2_completos(A,B):-

padre(A,F),padre(B,F),

madre(A,M),madre(B,M), A\=B.

% otra solución para "el problema hermanos completos"   que usa las relaciones padre y madre

 

tio(U,N):-hombre(U),hermanos(U,P),pariente(P,N).

tia(A,N):-mujer(A),hermanos(A,P),pariente(P,N).

 

abuelo(G,N):-pariente(G,X),pariente(X,N).        

 

Ahora, usamos sólo una regla para expresar la relación definida nuevamente pero podemos también definir la relación usando dos o más reglas. Si queremos expresar que ser un humano significa ser un hombre o ser una mujer, podemos hacerlo por esas dos reglas:

 

humano(H):-hombre(H).
humano(H):-mujer(H).

 

El cuerpo de la regla puede también usar la relación que está siendo definida. Esta característica es llamada recursión y las siguientes reglas muestran su uso típico.

 

descendiente(D,A):-pariente(A,D).

descendiente(D,A):-pariente(P,D),descendiente(P,A).

 

Uno puede usar la característica de PROLOG de variables de entrada y salida no determinadas (algunas veces llamada modo variable o multimodalidad)  para definir la relación ancestro.

 

ancestro(A,D) :- descendiente(D,A).
 
 


ANTERIOR

PRINCIPAL

SIGUIENTE