Prolog
• Es el representante más conocido del paradigma
Programación en PROLOG(1)
lógico.
• Prolog permite:
– Definir/especificar relaciones entre objetos.
Inteligencia Artificial
2º cuatrimestre de 2009
– Verificar si ciertos objetos están relacionados
entre sí.
Departamento de Ciencias e Ingeniería de la
Computación
Universidad Nacional del Sur
• A continuación veremoscómo…
2
Sintaxis Informal
Sintaxis Informal
nombres de relaciones
(también llamadas
predicados) y objetos.
• Existen 3 tipos construcciones en PROLOG
secuencias de caracteres
comenzando con
minúscula.
(llamadas cláusulas) :
• Hechos
• Prolog cuenta con variables. Las variables denotan
Permiten d fi i relaciones
P
i
definir l i
entre objetos.
objetos sinespecificar.
nombres de variables
• Reglas
secuencias de caracteres
comenzando con
mayúscula.
• Consultas
3
Hechos
Permiten verificar si ciertos
objetos están relacionados
entre sí
4
Hechos: ejemplos
• permiten establecer que una determinada tupla de
objetos están relacionados bajo una relación en
particular.
amigo(homero, barny).
suma(X, 0, X).
socio_club(juan,liniers).
• Sintaxis:
r(obj1, obj2,…,objn).
“la tupla (obj1, obj2,…,objn) pertenece a la relación r”
socio_club_liniers(juan).
ateniense(socrates).
socrates_es_ateniense.
relación de aridad 0:
proposición
1
Reglas
Reglas: ejemplos
• Permiten establecer que una determinada tupla de
mentiroso(X):- ateniense(X).
objetos están relacionados bajo una relación enparticular, pero en términos de otras relaciones.
gustos_en_comun(X,Y):- gusta(X, Algo),
• Sintaxis:
gusta(Y, Algo).
cabeza
cuello
cuerpo
r(obj1, obj2,…,objn) :- r1(…), … , rm(…).
∧
hermanos(X,Y):- padre_de(P, X),
padre_de(P, Y).
∧
7
8
Programas Prolog
Consultas
• Un programa Prolog es un conjunto de hechos y reglas.
• permiten verificar si una determinada tupla deobjetos
Ej:
están relacionados bajo una relación en partircular.
definición del predicado
progenitor/2
• Sintaxis:
progenitor(homero, bart).
?- r(obj1, obj2,…,objn).
progenitor(homero, lisa).
progenitor(abraham, homero).
• Ej:
abuelo(X,Y):- progenitor(X,Z), progenitor(Z,Y).
definición del
predicado abuelo/2
?- abuelo(abraham, lisa)
?- abuelo(X, bart) ¿bart tieneabuelo?
9
Resolución SLD y Backtracking
Consultas y Respuestas
Resolución de la meta “? − a.”
progenitor(homero, bart).
progenitor(homero, lisa).
1)
2)
3)
4)
5)
progenitor(abraham, homero).
( , ) p g
( , ), p g
( , )
abuelo(X,Y):- progenitor(X,Z), progenitor(Z,Y).
?- progenitor(homero, lisa).
yes
?- abuelo(abraham, bart).
yes
?- progenitor(homero, abraham).no
?- abuelo(abraham, X).
X = bart ;
X = lisa ;
¿abraham tiene
no
algún nieto?
?- progenitor(marge, lisa).
no
10
a : − b, p.
a : − e.
b : − q.
b : − e.
e.
? − a.
yes
11
a
(1)
b,p
(3)
q,p
fail
(2)
e
(5)
(4)
e,p
√
(5)
p
fail
12
2
(Tipos de) Términos
Estructuras: Rep. de Arboles Binarios
Arbol
binario
• Hasta ahorasolo utilizamos 2 tipos de términos ...
a
abuelo(abraham, X)
términos
b
c
d
constantes
estructuras
términos
Representación
en Prolog
(recursiva)
estructura
tree (a, tree(b, #, #), tree(c, tree(d, # ,#), #)) el functor tree
variables
tiene aridad 3
13
Estructuras: Rep. de Arboles Binarios
• A continuación se define el predicado arbolBin/1 que usa
términos14
Estructuras: Rep. de Arboles Binarios
• Otro predicado que manipula árboles binarios.
la estructura para árboles binarios.
% arbolBin(+Termino)
% Recibe como argumento un término y determina
% si éste corresponde a un árbol binario válido.
% altura(+Bin, -Alt)
% Recibe como argumento un árbol binario Bin
% y retorna su altura Alt.
altura(#, -1).
altura(tree(R,Hi,Hd), A):-...
Regístrate para leer el documento completo.