Prolog
Prolog
Prolog
Bibliografı́a y enlaces
Sterling, L. y Shapiro, E. “The Art of Prolog” (Segunda edici ón) MIT Press, 1994.
Bratko, I. “Prolog Programming for Artificial Intelligence” (Segunda edici ón)
Addison-Wesley Ltd. 1990.
Enlaces
Repositorios, bibliografı́a, compiladores, etc.:
! "
#$%&
'
(#"$'!$#)
'
*+,
#$*$
,
-./*
021 3/4
*$,"'(#$
,
*'567"'
37'89
*$
,':#$&,#;'<+,:#"$'!$#"'=>*
*'567"'
37'89
?5#$
,"*$
,
Ciao Prolog:
6
&@ *'5 A"'
37"'/
B$#
C'$
'2+
DE>F*
G'
$
Prolog de libre distribución, para WINDOWS 95, NT, etc. y MS-DOS):
6
&@0!H'>H)E>I./+F*
#$%&"
B&JHK
(L#$*$
,
$&+*$M>*
Lógica y Computación
programming
logic
algorithms
verification logic and AI
declarative programming
?
Uso convencional de los ordenadores – No es f ácil determinar la correcci ón de
los programas
?
Logic YES / NO
Visión tradicional de la lógica: nos permite razonar sobre la correcci ón de los
programas
?
Logic YES / NO
Aproximación imperativa
\ Basada en secuencias de instrucciones a ejecutar
\ Especificación “bottom-up” a partir de una arquitectura particular
\ No adecuada para problemas complejos, como los de IA
Lenguaje natural
En principio es la aproximaci ón ideal, pero:
\ es prolijo
\ es ambiguo
\ depende del contexto
La lógica: utilizada tradicionalmente por fil ósofos y matemáticos para representar
y formalizar los razonamientos
Questions Deduction
system
Answers / Results
Década de 1960
\ Greene: problem solving.
\ Robinson: resolución lineal.
Década de 1970
\ Kowalski: interpretación procedural de cláusulas de Horn:
\ Colmerauer: Prolog (Programmation et Logique).
\ D.H.D. Warren: Prolog compiler (hecho en Prolog). Muy eficiente (WAM)
Décadas 1980 y 1990
\ Investigación en paradigmas y técnicas de implementación avanzadas: Japón
(Quinta Generación), US (MCC), Europa (ECRC, proyectos ESPRIT).
\ Implementaciones comerciales
\ Sistemas de programación lógica paralelos y concurrentes.
\ CLP: Programación lógica de restricciones
\ ISO Prolog standard.
11
Elementos clave
\ Unificación de términos
\ Mecanismo de inferencia autom ática
\ Recursión como estructura de control b ásica
\ Visión lógica de la computación
Aplicaciones fundamentales
\ Bases de datos
\ Representación del conocimiento
\ Lenguaje natural
\ Metaprogramación
\ En general, búsqueda en un espacio de soluciones
\RQP`.bYP\,S;[bT T
Cómo se puede representar ?
13
Constantes:
\ Cadenas de caracteres que empiezan con minúscula, pueden incluir S y
dı́gitos. También pueden ir entre comillas:
e"`M\IH aE\;g.ZF\ N.fYP\ h=\FO3f,SHhg\4H3[bKJ"L3fa"Q3gb \8YO3fMJ,ON'P QJ>R3Yh=fY,TSUJ
\ Números: VVV , XWW , Y V<TS , <V TSPb Y , ]V<TS[Z Y
Variables: Cadenas de caracteres que empiezan con mayúscula (o ), pueden
S
S
incluir y dı́gitos: \
^]`_a+aH` cbXHSPe\Hg8[MZ
H%SHhg\4H3[b S S[d
Estructuras: un nombre de estructura (como una constante) seguido de un
número determinado de t érminos entre paréntesis:
VXVg ^bXNM\
Y`H.bcfe=b=c
15
Hechos y reglas
Ejemplo:
+;'2"*:$&&'$"A1"##)
+;'2"*:$&&'"$ -. ( +;'5*,)." * #-.
+;'2"*:$&&'"$ -. ( +;'5,
* )." " :&1#
1% -.8
17
Unificación
Unificar dos expresiones (por ejemplo t érminos) es buscar una sustituci ón para
las variables que hace que las expresiones sean id énticas.
Una h Th es una asignación de términos a variables.
Ejemplo: h T h
Q.b;g8gf Q3bPg8gf
\ \
] ]
\ \
\ \
\ \
^ h2O" ^ a N h "e" a <N fe O
Q.b;[8gf aM\;gMZF\
\ Imposible (1)
^ h 2O" ^ a N
O "e"
\ \ Imposible (1)
^ ^ >] Y >]"
Imposible (2)
19
Ejemplos de consultas
Dado el programa...
"#:" %&+]#$
"#:" %&+]#"'
"#:" "#$ ];'!,"*
"#:" "#'
IF'
1"*$: )#%+& ( #:$# :*"]#:-*'&(
1"*$: -.+/ ( #:
).%$0 "]#:10'/(
\
\RQP`.bYPf,S;[b e`M\IH V$# (De quién es Juan abuelo?)
abuelo_de(juan,X)
C5,{L=juan, M=X} C6, {X’=juan, Y=X}
padre_de(juan,K),padre_de(K,X) padre_de(juan,Z),madre_de(Z,X)
EXITO EXITO
X = miguel X = david
21
Un programa lógico y una consulta
.
Todas las respuestas (soluciones) posibles a la consulta.
\ Una respuesta es del tipo
, donde es una sustituci ón que hace que
sea cierto (es decir
es una consecuencia l ógica del programa).
FALLO, si no es posible inferir ninguna respuesta (soluci ón).
: Lista de objetivos a demostrar.
: sustitución a aplicar a la consulta.
23
4. Introducir el programa:
"$* ( "'!*
)
$* &+$
" +*3
'5+#$
5. Salvar el programa:
C(D C(
'2+#$
7. Cambiar de buffer :
C(D $
+&$").'/ ( #$,&+H'$#-.'/
+&"
$ ).'/ ( #$,&+H'$#-.)0 ,
&+
$ 10'/
25
Datos Estructurados
27
Ejercicio:
\ Dado el programa:
\ \
ZhH`M\8Y;b=c _ V
\ Obtener el resultado\ de las siguientes consultas:
ZhH`M\8Y;b=c N5\ Q+P 5N \ P
\
ZhH`M\8Y;b=c N5\TP +5N \ P%
\
ZhH`M\8Y;b=c N5\TP +5N \ Q P
\
ZhH`M\8Y;b=c N'P N P
\ \
Predicado
\
equivalente a
ZhH`M\8Y;b=c "
] :
] (unificaci ón). Ejemplos:
5N \ QP 5N \ P
\
5N \[P 5N \ P
\
\ \
\
N & \TP N:] P
\ de\ un
Pertenencia \ elemento a una lista:
aMb"aQ3bPg
\ N c P _V \
aMb"
a Q3bP
N:] ]Mc P R<
g aMbaQ.bPg "].c V
\
aMb"a3Q bPg " ] :
Usos de
( 1"# 1 7 10 R
Ver si un elemento está en una lista:
)
( " &1"# ).%W1
Buscar un elemento en una lista:
.
.
1
.
+"$
( "&1"#
/(
Buscar una lista que contiene un elemento:
/
/
0:
/
0 :%0:
)
\ \ \
Q=gbP^MZd
]
c`3^8^MZd
]
c`,E Q Y=Z;cO
]
Ejercicio: Definir
29
Concatenación de listas:
\"QPQ.bH3[
N'\P c
\ ]Mc ]Mc V \ \
\"QPQ.
b H3[
N c P c]McON =cP R \"Q8Q.bIH3[ cf]Mc =c V
\
\"Q8Q.bI3 H [ "]
Usos de :
( &+ 1
% 0!
Concatenar dos listas:
0
A 1
+$
( &+-. 1
Encontrar diferencias entre listas:
.
A 1
+$
\
\Q8Q.bH=[
] N5\ QP
Ejercicio: Cuál es el resultado de
\
Ejercicio: Definir
bPg=cHb
g8b = "]
Ejemplos
\ de términos aritméticos: \
\ -S T]FT , correcta si cuando se evalúa , ] y resultan ser t érminos
aritm\ éticos, en otro caso, se produce un error.
\ \ )S , incorrecta (error).
Predicados aritm
éticos
predefinidos:
,
\ Los usuales (distinto), ,
,
R
(igual),
Los argumentos de los predicados anteriores deben ser t érminos aritméticos
(en otro \ caso se produce un error). \
\ Z;c
: se evalúa el término aritmético y el resultado se unifica con el
término . Ejemplos: qu é diferencia hay entre las \ siguientes consultas?: \
[MZ;cQMYP\ Sa_V Z;c S a [.Z;cQEY;\ V
31
Aritmética (II)
\
Ejemplos: Supongamos que e
] est án ligados a S y a respectivamente, y es
una variable libre (sin ligar):
Z;c T a
No fallan:
ZHcKW
T a R W
]
\ \
\
ZHc ] R
Fallan:
]
T a ZHc W
] \ \
\
ZHc
Producen error:
R ^
\
\ de programa aritm
Ejemplo
c`;aE\
\ ético:
"] R Z;c K]WV
\
Q fIH.\X8XZK
^.Z M
Y;bIH=hPO;N
Ejercicio: Definir ,
:
es la longitud de la lista ; HMf;[8b=c
6R
:
es el número de nodos
del árbol .
R
33
35
Usos:
\ controlar el orden de los objetivos,
\ dar flexibilidad a programas que utilizan algunos predicados determinados
(por ejemplo, los predicados aritm éticos)
37
Ejemplo:
*&+,%)."R(
I# )." , '2+,# R" *+,":&+%+.
*&+,% )." R(
+$&+I # -. , *+,:*'&).""8
^MZ
H=[\Y8Y;TXS
Existen otros predicados de orden superior ( ,...)
39
41
Ejemplo: Un contador
R [ [
HM\a6Z;X X;f4HO3T V
\
X;fIHO=\;[f;g R< \
gbHOg\X"OX;fIHO ,
\
Z;c
\
\
\c8cHb;g; O XHIf HO "PV
X;I
f HO=\;[f;g <R
\c8cHb;g; O XHIf H O " V
Y;b8bPgS;[MZ;XK
Ejercicio: Definir un predicado que lea de un archivo F un
[MZ;XO3\8YP\RQ3g\ .Zh[H6Z"^.Z;X;\;[f
diccionario, formado por hechos de la forma: . Para
leer de un archivo, debe utilizarse la siguiente estructura:
Y;bPbPg S;[.Z;X K
R
f"Q3bH K
!gb\H[ HOgb\a
Y;bPbPg S;[\FO3fcHOg8b\a
[8bQ.b Q=gfHhg\aE\;g=cHb b=cO=b Q=gbP[MZHX;\;[f
XPY;fcHb HOgb8\a V
g8b\;[
Para leer un término de un stream, debe utilizarse .
Ejercicio: Definir un predicado
Q8`@c8XH\;g%
que busque la palabra P en el