Thursday, October 12, 2006

Características del lenguaje Prolog

Ejecución de los programas:
Para la ejecución de los programas de Prolog, proponemos el Ciao-Prolog, http://www.clip.dia.fi.upm.es/Software/Ciao/index.html#ciao
el cual tiene un shell que permite ejecutar objetivos.

El shell es una aplicación que esta incluida dentro del Ciao-Prolog con el nombre de ciaosh, y al ejecutarla aparece el siguiente mensaje:

Ciao-Prolog 1.9 #44: Mon Dec 30 16:47:15 2002
?-

El símbolo? nos indica la zona donde podemos escribir los objetivos a ejecutar.

Por ejemplo:

Ciao-Prolog 1.9 #44: Mon Dec 30 16:47:15 2002
?- f(X) = f(3).

X = 3 ?

Para ejecutar el objetivo es necesario teclear punto al final y teclear ENTER.
A continuación, el shel nos dice si los objetivos tiene éxito o no y como quedan instanciadas las variables. Después aparece un signo de interrogación, lo cual nos indica que le podemos pedir otra solución tecleando un punto y como (;) y pulsando ENTER.

Para cargar un programa en Ciao-Prolog es como sigue:


?- Consutl( ‘Programa.pl’ ).

Yes
?-

Observe que el nombre de fichero se escribe entre comillas simples. En caso de que se quiera ejecutar a los programas desde una carpeta, por ejemplo curso, seria:

?- Consutl( ‘c:/curso/Programa.pl’ ).

Yes
?-


Para salir del shell basta teclear el predicado halt.
?- halt.




2.2.1. Declaración de hechos y reglas

Como ya se dijo una regla al estilo prolog se representa como:

Predicado (Argumento1, Argumento2,.....)

Pc(Arg,..) si P1(Arg,.....) y P2(Arg,.....) y .......

Ahora bien la sintaxis correcta en Prolog seria

Pc (Arg,.....) :- P1(Arg,......) , P2(Arg,.....) , P3(Arg,....)........
(la cual es la sintaxis estándar que viene DEC 10 Prolog)

Algunos lenguajes aceptan también la siguiente sintaxis

Pc(Arg,.....) if P1(Arg,....) and P2(Arg,....) and ..........

Donde a cada regla se le llama cláusula
Y tendremos que para:
Pc :- Pi
Pc: Cabeza de la cláusula
Pi: Cuerpo de la cláusula
:- Cuello de la cláusula.

Sean los siguientes ejemplos de hechos o predicados:
progenitor (juan, luis).
progenitor (maria, luis).
progenitor (luis, jose).
progenitor (luis, ana).
progenitor (ana, elena).

Ahora si se preguntaran al compilador Prolog

? – progenitor (juan, luis).
yes.

Pero si fuera

? – progenitor (juan, sofia)
no

Seria la respuesta, ya que no existe ningún hecho que confirme la pregunta.

Si quiseramos saber todos los descendiente de Luis

?- progenitor (luis, X).
X= Jose
X= Ana

José y Ana son los descendientes de Luis

Ahora vamos a definir una regla o cláusula, hasta ahora solo hemos definidos hechos.
Veamos la regla abuelo:
abuelo(X,Y) :- progenitor(X,Z) , progenitor(Z, Y) , masculino (X).
Nos hizo falta un predicado que no estaba definido (masculino), por lo que necesitamos incluir nuevos hechos.
masculino(juan).
masculino(jose).
masculino(luis).
femenino(ana).
femenino(maria).
femenino(elena).
Ahora mi base de conocimientos esta compuesta por la regla Abuelo y los hechos progenitor, masculino y femenino.
Y si quisiera incluir la regla hermano.
hermano(X,Y) :- progenitor(Z,X), progenitor(Z,Y), masculino(X).
O la regla madre:
madre(X,Y) :- progenitor(X,Y), femenino(X).

No comments: