Está en la página 1de 8

PONTIFICIA

UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.1 Introduccin
PROLOG es un lenguaje declarativo e interpretado, en este tipo de lenguajes se
representan los conocimientos sobre un determinado dominio y sus relaciones.
A partir de ese conocimiento, se deducen las respuestas a las preguntas
planteadas, es decir se obtiene una inferencia.
El conocimiento se formaliza mediante un conjunto de relaciones que describen
de forma simultnea las propiedades y sus interacciones.
Se declara el conocimiento disponible acerca de:
OBJETOS:
propiedades
relaciones
REGLAS, que determinan interacciones lgicas del tipo: si ocurre q, r, s y t
entonces P

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.1 Introduccin
Un programa Prolog est constituido por un conjunto de clusulas de Horn. Una
clusula de Horn tiene la forma general:
p(t1,t2,.,tn) :- p1(.),p2(.),,pm(.) con m >= 0
Donde tanto p como las pi son smbolos predicados con sus argumentos entre
parntesis. A los argumentos de un predicado se les denomina Trminos.
Las clusulas de Horn son expresiones condicionales, siendo el smbolo :- el
condicional o smbolo de la implicacin (normalmente en lgica se utiliza el
smbolo
) .

As la clusula anterior podra leerse de la siguiente forma:


SI p1(.) Y p2(.) Y Y pm(.) ENTONCES p(t1,t2,,tn)

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.1 Introduccin
Cuando m=0, la clusula no tiene parte derecha, en este caso diremos que se
trata de un hecho o afirmacin.
p(t1,t2,,tn).
Cuando la clusula no tiene parte izquierda (o cabeza), se tiene pregunta, este
tipo de clusulas se utilizan para realizar la entrada/salida del programa:
?p1(.),p2(.),,pm(.)

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.2 Clusulas
Un programa en Prolog est constituido por una secuencia de clusulas. Estas
clusulas deben representar todo el conocimiento necesario para resolver el
problema.
Se pueden diferenciar tres tipos de Clusulas:
Hechos (afirmaciones), se pueden representar:
Objetos
Propiedades de objetos
Relaciones entre objetos
Reglas.
Consultas.
Cada clusula puede estar formada por uno o varios predicados. Las
clusulas deben terminar obligatoriamente en punto.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.3 Hechos
Es el mecanismo bsico para representar:
objetos/personas/conceptos.
propiedades de los objetos.
relaciones entre los objetos.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

padre(luis).
padre_de(luis, pedro).
azul(cielo).

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.3 Hechos
Ejemplo

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.4 Consultas
Es el mecanismo para extraer conocimiento del programa.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.4 Consultas
Por ejemplo si Vicente busca amigos/as de mis amigos que sean
millonarios/as y estn solteros/as:

Una consulta estar constituida por una o varias metas que Prolog deber
resolver. El intrprete de Prolog nos devuelve ms soluciones si utilizamos el
punto y coma ;
Cuando no existen ms soluciones que unifiquen con el objetivo, el intrprete
contesta No.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.5 Reglas
Permiten establecer relaciones ms elaboradas entre objetos, por ejemplo,
relaciones causa-efecto.
padre_de(juan, jose).
familiares(pedro, miguel).
hermanos(enrique,jose).
familiares(X, Y) :- padre_de(X, Y).
familiares(X, Y) :- padre_de(Y, X).
familiares(X, Y) :- hermanos(Y, X).
familiares(X, Y) :- hermanos(Y, X).

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.6 Equiparacin
Por ejemplo, si una variable est libre y es equiparada con un valor numrico, se
obtiene una instanciacin (asignacin) de la variable con dicho valor.
Este mecanismo permite comprobar si dos expresiones son equivalentes,
produce como resultado una sustitucin de trminos cuando esta es posible.
Ejemplos:
amigos(pedro, vicente) y amigos(pedro, vicente)
son equiparables.
amigos(pedro, vicente) y amigos(X, vicente)
son equiparables. X = pedro.
amigos(pedro, Y) y amigos(X, vicente)
son equiparables. X = pedro, Y = vicente.
amigos(X, X) y amigos(pedro, vicente)
no son equiparables porque X = pedro, X = vicente no es posible.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.7 Desigualdad
Para comprobar si dos trminos son distintos, disponemos de diferentes
operadores.
Desigualdad \==
Comprueba si dos trminos son distintos. Por ejemplo, si dos variables tienen
distintos valores instanciados.
Desigualdad aritmtica =\=
Verifica la desigualdad numrica de dos expresiones.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.8 Igualdad y asignacin
Disponemos de cuatro tipos de operadores de igualdad:
Igualdad aritmtica [=:=]. Comprueba la igualdad numrica de las
expresiones argumento.
igual1(X, Y) :- X =:= Y.
Identidad [==]. Comprueba si los trminos argumento son idnticos.
igual2(X, Y) :- X == Y.
Unificacin [ = ]. Comprueba si los trminos argumento son unificables
(equiparables). Es equivalente a la asignacin directa entre variables en un
lenguaje procedimental. Da fallo si la unificacin no es posible.
igual3(X, Y) :- X = Y.
Una definicin equivalente sera:
igual4(X,X).

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.8 Igualdad y asignacin
Asignacin [is]. Evala la segunda expresin e intenta asignar el valor
obtenido a la variable. No es conmutativo
incremento(X,Y) :- Y is X+1.
Una definicin similar a la de igualdad sera:
igual5(X, Y) :- X is Y.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.8 Igualdad y asignacin
A continuacin se muestra una tabla comparativa de todas las posibilidades
existentes.

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.9 Operadores lgicos y aritmticos
Para comprobar si dos trminos son distintos, disponemos de diferentes
operadores.

Operadores y funciones aritmticas vlidas en Prolog son:

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO

INF 152 Programacin en Lgica

Escuela de Ingeniera Informtica

Captulo 4 PROLOG
4.10 Negacin
Existe un predicado de negacin en Prolog (not) que est implementado
como negacin por fallo, esto quiere decir que se evala como falso
cualquier cosa que Prolog sea incapaz de verificar que su predicado
argumento es cierto.
no_nulo(X):-not(X=:=0).
saldo_cuenta(maria,1000).
saldo_cuenta(flora,3000000).
saldo_cuenta(antonio,2000000).
millonario(X) :- saldo_cuenta(X, Y), Y > 1000000.
pobre(X) :- not(millonario(X)).

Desarrollado por
Ricardo Soto De Giorgis

Escuela de Ingeniera
Informtica

INF 152 Programacin en Lgica