Anda di halaman 1dari 3

Prolog I - Introducción

1. Preliminares
 Prolog es un lenguaje declarativo que implementa la programación lógica de
predicados.
 Prolog provee infraestructura para el desarrollo de sistemas de producción.
 Prolog admite sólo cláusulas de Horn escritas en la forma Q ⟸ P .
o Cláusula de Horn: es aquella que sólo admite un literal no negado:

−P1 ∨−P2 ∨ ∙∙ ∙∨−P N ∨Q ≡−( P1 ∧ P2 ∧ ∙∙ ∙∧ P N ) ∨ Q≡ P ⟹ Q

La cláusula de Horn puede tener una conjunción de literales como


antecedente pero sólo un literal como consecuente. Un literal es un
predicado (también llamado átomo).
 La lógica de predicados permite distinguir e inferir sobre las particularidades de
una proposición: persona(juan). persona(X).

2. Elementos del lenguaje Prolog


 Comentarios: % Esto es un comentario y tiene alcance de una sola línea.
 Constantes:
o Valores numéricos : 125 456.789
o Palabras o letras que comienzan con minúsculas: juan x1
o Cualquier frase entre apóstrofos: ‘Fernandez’ ‘papas fritas’

 Variables lógicas:
o Palabras o letras que comienzan con mayúscula: X Pmax
o Palabras o letras que comienzan con _: _X
o Variables lógicas anónimas: _

 Functores o átomos: es la forma de representar los predicados.


Tienen la forma general: identificador (t 1 ,t 2 , ∙ ∙∙ , t n)
Donde identificador cualquier letra minúscula o palabra que comienza en
minúscula o símbolo. Los argumentos t k son términos.

alfa(3, X, h(i, j)) +(a,b)


o Puede haber functores sin argumentos.
o La aridad de un functor es la cantidad de argumentos que tiene. Para los
ejemplos de arriba, tenemos la siguiente notación para la aridad:
alfa/3 +/2
o Prolog permite la sobrecarga de functores: alfa(X1,X2) y alfa(X1,X2,X3)

1
 Términos: son términos las constantes, variables lógicas, functores y cláusulas.

 Conectivos lógicos:
o Y: , (la coma)
o O: ; (el punto y coma)

 Operadores: son functores predefinidos. Los hay aritméticos y relacionales.


o a + b es el predicado predefinido +(a,b)

 Cláusulas: son cláusulas de Horn. Tienen la forma Q ⟸ P . Donde Q es un


predicado y P es una conjunción de predicados. Tienen el siguiente formato:

Q:−P1 , P 2 , ∙∙ ∙ , P N .

o El predicado Q es la cabeza y la secuencia P1 , P2 ,∙ ∙ ∙, P N es el cuerpo.


o El final de una cláusula de nota con punto.
o Una cláusula sin cuerpo se denomina objetivo: q(X, Y). q(juan, Y).
o Los elementos de la secuencia P 1 , P 2 ,∙ ∙ ∙, P N son objetivos.
o Una cláusula sin cuerpo y que tiene sólo constantes como argumentos se lo
denomina hecho: q(juan,40).
o Un programa Prolog es, básicamente, un conjunto de cláusulas, es decir, un
término.

3. Unificación: mecanismo por el cual las variables lógicas toman valor. Si dos variables
lógicas unifican pueden ligarse a un valor. Una variable no ligada está libre. Ejemplo:

p(1). % hecho verdadero.


p(2). % hecho verdadero.
q(2). % hecho verdadero.

r(X):- p(X),q(X). % cláusula conjuntiva de dos objetivos

a. X queda ligada a 1 porque unifican por la cabeza p(X) con p(1), el primer punto
de elección para p(X). Se elimina p(1).
b. El primer y único punto de elección para q(X) es 2. Pero X no está libre y está
ligada a 1, por lo tanto, q(1) falla y r(X) falla.
c. Backtracking: se vuelve para atrás deshaciendo la ligadura X = 1 para p(X).
X queda ligada ahora al segundo punto de elección X = 2, vamos hacia delante.
d. Se ejecuta q(X), pero X no está libre, luego se ejecuta q(2) que tiene éxito,
manteniendo la ligadura de X al valor 2. r(X) tiene éxito con X ligada al valor 2.

2
Toda variable lógica unifica con un término: w(t(2) y w(Y) unifican e Y queda ligada a t(2)
que es un término.

4. Shell del SWI Prolog – Predicados predefinidos:

o edit(‘nombre archivo.pro’). Edita un archivo existente o lo crea si no existe.


Usa el bloc de notas. Los archivos se almacena en la subcarpeta bin de la carpeta
de sistema Prolog2.

o consult(‘nombre archivo.pro’). Compila el archivo. Se ejecuta sólo una vez


durante la edición de un mismo archivo.

5. Operadores (predicados) predefinidos:


< menor que > mayor que =< menor o igual que >= mayor o igual que
== igualdad aritmética \== desigualdad aritmética X is Y asignación

write(X) el valor de X a pantalla nl nueva línea a pantalla


read(X) lee un valor del teclado en la variable lógica X.
not p(X) la negación lógica.

6. Bucle fail. Obtención de todas las soluciones. El predicado predefinido fail obliga a
buscar otra solución si la hay:
p(2).
p(3).
p(5).
q(3).
q(4).
q(5).
s(X):- p(X),q(X).
soluciones:- s(X), write(X), nl, fail, soluciones.

Anda mungkin juga menyukai