Las constantes, en P ROLOG, se representan con nombres que comienzan con minusculas. Hay otro tipo de constantes (e.g., numericas)
que veremos mas adelante. Por otro lado, los nombres que comienzan con mayusculas denotaran variables cuantificadas universalmente.
Cada una de las lneas anteriores representa un hecho. Un hecho corresponde a un literal positivo cerrado (sin variables).
Estos axiomas no pueden tomar una forma arbitraria, sino que tienen restricciones sintacticas importantes. No es posible escribir un
programa P ROLOG a partir de cualquier conjunto de axiomas de un
lenguaje de primer orden. Por otra parte, P ROLOG esta extendido
con caractersticas extra-logicas, de modo que la relacion que hay
entre P ROLOG y logica de predicados no es obvia.
Introduccion a P ROLOG
Captulo 1
Hechos
1.1
&
&
%
'
&
'
'
&
'
%
"
"
#
$
'
*+
%
-
"
!
El prompt
indica que el interprete esta listo para escuchar los
requerimientos del usuario. A partir de esto uno puede hacer consultas:
Al desarrollar un programa, uno interactua con un interprete de P RO LOG . El programa, en este caso el conjunto de hechos anteriores, se
puede ingresar de dos formas; directamente:
&
$
&
'
2
-
3
,
&
'
&
&
4
5
5
&
'
&
'
Al decir
estamos preguntandole a P ROLOG si existe
alguna interpretacion para la variable que haga que
sea verdadera. P ROLOG responde que
es un valor que
hara que la consulta sea verdadera.
&
Mediante el signo , P ROLOG pregunta si se desea buscar otra solucion para el mismo problema. Al decir ; se le indica a P ROLOG
que efectivamente uno quiere buscar otra solucion. Al no haber otra
solucion, P ROLOG responde . Otro ejemplo puede ser:
&
6
&
6
&
6
5
'
5
5
7
7
4
5
&
%
'
;
B
=
A
;
@
>
>
?
&
<
;
9A
(1.1)
donde, y
son literales positivos. Las variables que aparezcan en la cabeza de la clausula se suponen cuantificadas universalmente desde afuera. Por ejemplo, la clausula:
>
&
'
&
'
H
D
F
<
es equivalente a:
Reglas
Una regla P ROLOG es una clausula de Horn definitiva, las cuales son
de la forma:
1.2
I
P
9
P
9
N
F
F
C
O
M
C
=
>
>
L
J
9
P
I
I
J
9
N
O
>
M
=
=
>
L
K
I
J
9
J
9
G
H
I
D
F
K
9
J
9
:-
A
A
U
A
9A
T
9A
'
V
7
'
En esta notacion el smbolo ; se utiliza como disyuncion. La regla anterior es equivalente a las dos reglas originales. El uso de ;
debe restringirse intentando mantener la claridad de las reglas que
se escriban. No es recomendable utilizar ; cuando el resultado sea
difcil de leer.
V
'
'
10
&
'
+
. En pri-
4
&
7
4
V
7
7
V
4
+
+
7
'
7
'
&
&
&
'
&
'
11
&
&
&
. Un li-
1.3
12
Y
B
X
W
M
?
Y
9A
&
&
'
4
4
'
Numeros:
Enteros y/o reales. Por ej.
14
E JEMPLO : L ISTAS
Al igual que en calculo de predicados, un termino puede ser: Sintacticamente, P ROLOG utiliza reglas similares a las de calculo de
predicados para la definicion de terminos. Los terminos pueden ser:
13
'
9A
:
U
A
T
9A
0
T
S
9
A
b
b
A
Para comprender cabalmente el funcionamiento del interprete de Prolog, necesitamos conocer los conceptos de unificacion y sustitucion,
que se estudian a continuacion.
L
9A
9A
Cada
es un literal positivo de la forma
, donde
es un predicado de aridad . De este modo, las reglas para
de la sub-seccion anterior corresponden a un programa valido.
es un literal.
donde cada
:-
o como:
16
:-
y se puede
15
j
g
G
?
cuando
\
_
C
I
_
W
P
g
K
g
C
9
H
9
c
A
9A
9A
i
G
corresponde al termino
k
S
i
Por ejemplo,
18
Si
es un literal y una sustitucion, entonces
es un literal
que resulta de sustituir las variables que aparezcan en y por los
terminos asignados en .
Un literal
tal que
i
Una sustitucion es un conjunto de asignaciones de terminos a variables. Por ejemplo, las siguientes son sustituciones:
17
h
G
W
K
_
W
C
I
9
o
E
W
P
g
;
h
g
_
H
;
9
L
P
g
C
C
G
9
o
E
\
_
W
h
K
g
J
f
g
S
I
A
g
9
9
g
L
_
W
H
L
G
G
W
9
f
P
g
K
_
W
9
K
_
h
K
g
I
I
9
_
H
C
H
;
9
`
W
J
`
_
;
D
_
W
H
Y
O
M
P
g
W
f
`
h
;
9
f
g
L
_
W
f
J
_
H
I
P
9
Y
O
C
W
g
g
G ENERAL .
U NIFICADOR M AS
j
pq
J
C
J
g
pq
s
s
cuando no es posible
Un unificador tambien se representara como una lista, cuyos elementos seran pares variable, termino . El manejo de listas se
hara a` la L ISP.
Un literal positivo se representa como una lista cuyo primer elemento es el nombre del predicado y los otros elementos son los
argumentos. Un literal negativo se representa con una lista cuyo
car (primer elemento) es el smbolo
y cuyo cdr (la lista sin
el primer elemento) es la lista correspondiente al literal positivo.
20
y
se dice mas geneUn unificador para listas de literales
cuando existe otro unificador
tal que
ral que un unificador
.
19
pq
t
22
t
t
6
6
2
j
j
j
~
u
xy
pq
pq
2
j
2
5
j
r
t
pq
j
v
j
0
j
1
j
r
j
{
j
/
pq
j
v
}
j
21
pq
1
t
0
xy
j
j
r
pq
pq
v
r
1
pq
23
K
pq
5
/
{
w
)
{
j
5
v
(
{
pq
t
/
3
24
De este modo, es posible que P ROLOG entregue sustituciones problematicas, como la mencionada anteriormente.
j
/
{
j
u
2
pq
)
j
j
pq
En el lenguaje de programacion P ROLOG, la unificacion, entre literales o entre terminos, juega un rol fundamental. En cada paso de
derivacion, como veremos mas adelante, se utiliza unificacion. Por
esta razon, es fundamental que este procedimiento sea muy eficiente. Persiguiendo esta eficiencia, en P ROLOG el occurs check no se
realiza. Es decir, P ROLOG, utiliza el siguiente procedimiento:
El procedimiento
recibe como primer argumento
una sustitucion y como segundo argumento una lista de literales, un literal o un termino y devuelve el resultado de aplicar la
sustitucion del primer argumento al segundo argumento.
Finalmente, el procedimiento
(fig 3.4), recibe una variable
como primer argumento y retorna una unificacion entre esta variable y su segundo argumento. Esto es posible solo si la variable no
aparece en su segundo argumento.
pq
La funcion
realiza el llamado occurs check, mediante el
cual se verifica que en la unificacion no se produzca una asignacion
.
recursiva del tipo
t
5
/
z
xy
~
En P ROLOG existe un predicado que permite encontrar el UMG entre dos expresiones.
25
A
i
9A
0
T
S
9
5
@
9A
&
e
9A
5
'
&
^
A
@
A
9A
9
i
e
?
Ademas, maneja una sustitucion inicializada en vaco. Una vision simplificada del interprete se da en la figura 3.5 Algo que no
se menciona en la figura es que el interprete da la posibilidad de encontrar otra sustitucion que satisfaga al objetivo inicial en caso de
que la respuesta sea positiva. Por simplicidad, en el algoritmo que
describimos mas abajo ignoraremos este paso.
5
&
'
Los literales
se interpretan como una lista de objetivos a
ser demostrados uno a uno. Los literales de esta lista pueden incluir
variables. En cuyo caso podemos decir que la tarea de prolog es
determinar si existe una sustitucion para la cual la conjuncion de
sea deducible a partir del programa.
:-
Por ejemplo:
26
0
n
%
*
*
&
&
2
'
Lista
Interprete de Prolog
S (exito) + susticion de
variables que aparecen
en objetivo inicial
No (falla)
27
28
9A
k
9
r
j
9
y
: Dos procedimientos que reciben una lista de objetivos
y retornan una sustitucion o #Falso si no hay sustitucion posible.
recibe ademas de la lista de objetivos, un ndice a una
clausula dentro del programa.
: sustituciones.
En la descripcion del algoritmo que estudiamos mas abajo utilizaremos la siguiente convencion:
DE CONSULTAS .
A LGORITMO DE P ROLOG PARA RESOLUCI ON
de Objetivos
Programa P ROLOG
pq
9A
y
: dos funciones sobre reglas o listas de objetivos. Si
es una lista, entonces
es el primer literal de y
es el resto de la lista. Si es una clausula,
es la cabeza de la clausula y
es el cuerpo.
: El procedimiento
29
pq
.
pq
j
9
I
r
2
En este procedimiento no se considera la posibilidad de que uno de los objetivos pueda corresponder al predicado
extra-logico .
El procedimiento
invoca a
(ver figura 3.6) indicandole
que debe comenzar a buscar una sustitucion, que permita satisfacer
la lista de objetivos, a partir de la clausula del programa2 .
t
30
podramos guardar el estado de la computacion en un objeto. Este objeto, llamado continuacion, contendra el stack de registros de
activacion junto con el punto en el cual se esta ejecutando el procedimiento. Entonces, en vez de ejecutar la instruccion de return como
aparece en el procedimiento, se ejecuta una instruccion condicional.
La condicion dira que, en la primera ejecucion de este procedimiento, se retorna la composicion junto con la continuacion. La segunda
oportunidad en que se ejecuta esta continuacion, el procedimiento
retorna
. De este modo, la continuacion permite que se encuentren otras respuestas. La forma en que se detecta que invocacion
del procedimiento se esta ejecutando (es decir, va directa o va la
continuacion) depende del lenguaje utilizado y de la forma en que se
realicen las continuaciones.
Dado que
voca como:
y
el procedimiento
0
'
'
0
V
0
E JEMPLO :
32
&
'
31
/
.
t
/
j
v
w
r
v
w
t
.
.
j
j
r
r
w
t
u
.
r
6
6
v
.
r
t
|
t
v
v
pq
5
5
.
.
|
.
.
.
34
~U
33
2
v
U
0
'
del objetivo
'
&
&
&
&
&
&
&
&
&
&
&
&
&
&
|
|
0
0
0
0
0
t
&
3
5
&
'
&
'
'
r
9A
4
4
5
'
'
|
V
|
4
<
9A
son verdaderos.
36
Manejo de Listas
1.4
El objetivo
sera verdadero si existe una sustitucion tal que, para cada sub-objetivo de ,
existe una clausula :en el programa, tal que:
Si
es una lista de literales que forman una consulta. Entonces,
desde un punto de vista declarativo, P ROLOG intenta demostrar que
es verdadero.
35
37
4
'
)
)
%
4
~
4
~
(
c
~
)
)
)
)
%
4
)
(
)
(
c
%
%
4
(
(
(
c
4
(
4
4
'
'
3
Es usual que este predicado, junto con otros predicados para manipulacion de listas, esten predefinidos o sean
parte de una librera estandar de P ROLOG.
Al igual que en el lenguaje de programacion L ISP, las listas son elementos basicos del lenguaje P ROLOG y se encuentran predefinidas.
es equivalente a la lista
, lo que tambien puede escribirse
. La tabla de la figura 3.13 ilustra las equivalencomo
cias entre las diferentes notaciones para listas.
38
Al igual que en L ISP, existe una notacion mas facil de leer para
manejar listas. De hecho, la lista:
)
1
El predicado
recibe como argumentos tres listas. De moes un predicado verdadero cuando es
do que
el resultado de realizar append de las listas
y . Para comprender mejor la forma en que este predicado se define, veamos primero
una version L ISP del mismo:
1.4.2
39
'
j
j
j
j
j
40
Notese que en L ISP hay solo dos argumentos para append, puesto
que la funcion retorna un resultado.
En P ROLOG, el resultado debe ser uno de los argumentos del predicado. Al invocar
, la variable
estara unifica. La primera condicion de la funcion L ISP
da al resultado del
dice que, si la primera lista es vaca, entonces el resultado es igual a
la segunda lista. Esto se escribe en P ROLOG como:
)
'
41
(
&
'
%
4
&
(
'
5
&
4
)
'
4
)
~
%
4
(
j
42
(
(
)
&
)
&
(
'
5
4
4
j
'
U
(
(
(
4
v
'
v
1.4.5
'
V
4
v
'
'
j
2
2
0
0
|
1
T
%
1
se ve en la figura 3.16.
ternativa para
44
El predicado
es verdadero si su segundo argumento es el
u ltimo elemento del primer argumento, el cual debe ser una lista.
1.4.4
El objetivo
sera satisfecho cuando L1 y L2 sean
listas con los mismos elementos pero en orden inverso, la figura 3.15
ilustra una primera version de este procedimiento. Una version al-
1.4.3
43
'
'
)
j
%
|
|
j
)
%
0
%
2
|
es una
46
La invocacion
se satisface cuando
es otra lista que es una permutacion de .
lista y
4
4
'
j
(
es igual
45
1.4.7
La invocacion
se satisface, cuando
menos una de sus componentes.
a
V
V
(
4
1.4.6
'
&
&
&
&
(
5
&
'
Manejo de Numeros
0
1.5
47
5
0
48
Las expresiones aritmeticas se forman de la manera usual utilizando parentesis redondos y operadores , , , que son operadores de
suma, resta y multiplicacion, y y , que corresponden a division
e
respectivamente. El operador
corresponde al
resto de la division.
'
'
y
que permiten comparar dos valores numericos. El
primero es verdadero si los valores numericos son iguales, y el
segundo se son diferentes.
2. , ,
1.
'
&
'
&
'
&
&
&
'
49
1.6
50
Si el espacio de soluciones para un problema es enumerable, entonces podemos tener un modulo generador de soluciones, y un modulo
chequeador o probador de soluciones.
1.7.1 Motivacion
1.7
&
El espacio de posibles soluciones esta dado por el conjunto de individuos, que en P ROLOG podramos especificar como:
)
&
'
0
(
(
(
(
(
v
)
v
'
|
j
'
j
52
Si es una lista de numeros que queremos ordenar, entonces un espacio de soluciones posibles corresponde al conjunto de permutaciones
de , de modo que podemos escribir:
La estrategia utilizada ha sido generar las posibles soluciones, utilicomo generador de posibles soluciones, y probar, utizando
lizando
como probador.
Si tratamos de satisfacer el
cion que queremos.
51
'
)
%
7
7
)
%
(
|
(
%
7
7
&
6
7
&
(
6
(
5
7
5
53
Para el problema especfico de ordenacion de listas, es posible especificar un algoritmo mas apropiado que el anterior.
7
'
4
4
7
4
7
7
|
4
'
4
)
'
%
7
7
Consideraremos que una posible solucion es una secuencia de acciones elementales (cruces del ro de un lado a otro), que llamaremos
plan. De este modo, necesitaremos un generador de planes, junto
con un chequeador de planes, el cual debera reconocer cuando un
plan es exitoso.
54
q
'
q
no estan unificadas, se
56
,
Para representar esta accion, utilizaremos el termino
donde correspondera al numero de canbales y correspondera al
numero de misioneros a cruzar.
La u nica alternativa sera especificar logicamente los numeros enteros y sus operaciones basicas. Esto se puede realizar, pero el costo
computacional del procedimiento resultante es muy alto.
.
P LANES DE ACCI ON
55
5
'
6
q
5
q
5
,
6
,
6
5
q
5
q
q
q
q
q
'
'
5
|
q
'
'
'
q
5
q
58
A partir de la configuracion o estado inicial, queremos aplicar acciones primitivas para generar otras configuraciones o estados. Estos
estados deben representarse explcitamente.
E STADOS .
57
q
5
q
'
q
q
'
5
'
q
DE P LANES .
G ENERACI ON
59
4
j
|
,
'
4
(
4
La situacion es aun mas compleja, puesto que antes de generar todos los planes de longitud
todos los planes de longitud .
, se generan
Dado que hay cinco acciones posibles, tendremos que generar entre
y
planes distintos.
60
Al invocar
que
.
|
0
0
'
4
)
t
%
4
4
0
|
|
4
t
0
62
'
t
|
t
, el
Donde
sera verdadero cuando al
partir de y del plan se llega al estado final , sin pasar por ningun
estado intermedio invalido.
61
0
0
5
'
q
6
q
6
5
q
5
0
t
5
'
4
t
|
'
|
4
|
t
4
q
|
,
64
&
'
|
0
|
(
0
63
'
'
5
'
'
'
'
|
|
'
'
|
'
5
5
,
'
.
C ONCLUSI ON
65
66
1
67
Para producir programas practicos, es necesario escapar del paradigma de programacion logica pura (es decir, P ROLOG puro).
'
68
Por otra parte, los predicados meta-logicos son aquellos que permiten razonar respecto de las reglas que se ejecutan y respecto del
estado de una demostracion.
P ROLOG intenta satisfacer dicho objetivo, invocando a procedimientos aritmeticos que no obedecen a una especificacion logica, sino a
rutinas aritmeticas extra-logicas.
Captulo 2
(
&
&
6
'
1
&
&
'
&
&
'
Es decir, P ROLOG buscara todas las formas de satisfacer el objetivo. En muchas ocasiones uno puede estar interesado en una sola
solucion para un objetivo dado. Para estos casos, P ROLOG entrega
la posibilidad de cortar la busqueda, mediante el uso del operador
.
70
Si utilizamos el predicado
, que vimos anteriormente (figura 3.12), observaremos el siguiente comportamiento:
2.1
69
71
'
4
4
4
'
j
(
&
(
6
|
&
'
%
(
&
&
&
'
72
Es comun que uno este interesado en una sola solucion para un problema. En este caso podemos reescribir la definicion de la siguiente
manera:
(
&
'
4
4
74
'
&
'
&
4
(
'
Como ejercicio, determine que respuestas diferentes da P ROLOG pay con el objetira con el objetivo
vo
.
Luego, al fallar
metido con aquel valor para
Por que?
73
'
'
&
A
`
I
K
`
@
L
9
J
9
L
`
9
K
J
L
I
J
K
donde
e
son tuplas disjuntas de
variables. Si P ROLOG logra demostrar
, entonces el
se satisface, y
P ROLOG se compromete con las unifica.
ciones encontradas para resolver
Ademas, P ROLOG se compromete con la
regla y no buscara otra manera de satisfacer
.
:-
&
&
'
76
75
1
L
(
7
&
&
'
&
'
77
'
4
7
7
'
-
-
El tercer argumento de
gundo argumentos.
Para determinar si un corte determinado es verde o es rojo, uno simplemente elimina los cortes y lee el programa en forma declarativa.
Si la lectura declarativa es correcta, entonces el corte es verde.
Un corte se dice rojo cuando se busca abusar del procedimiento P ROLOG de demostracion. Esto u ltimo resulta en programas
que pierden su significado declarativo.
78
En la jerga del lenguaje de programacion P ROLOG, se han catalogado dos formas del uso del operador de corte, llamadas cortes verdes
(green cuts) y cortes rojos (red cuts).
Entonces, como estilo de programacion se recomienda que se escriban programas sin cortes. Si la lectura declarativa del programa es
correcta, se agregan cortes con el objetivo de impedir que P ROLOG
se entretenga explorando demostraciones que no tendran e xito.
79
&
'
&
'
&
'
La condicion
no puede ser verdadera si se invoca la segunda
regla. Por ello, la condicion
esta demas.
80
!
&
'
5
4
-
&
'
-
&
'
%
>
1
,
5
j
>
'
'
Definiremos el predicado
, que recibe un literal positivo como
argumento. Si el literal es demostrable por P ROLOG, entonces se
sera satisfecho.
fallara. En otro caso, el predicado
, el
Desgraciadamente, este programa no es valido en P ROLOG, puesto que las clausulas admisibles en un programa P ROLOG deben ser
clausulas de Horn. Es decir, estas reglas no pueden escribirse en
P ROLOG.
82
La alternativa a lo anterior es utilizar nuestro conocimiento del procedimiento de demostracion para definir un operador de negacion
basado en fallas.
Como ejemplo, supongamos que queremos definir una regla que reciba un a tomo y tres listas de a tomos como argumentos.
81
j
'
4
4
'
'
j
|
j
4
&
4
La primera clausula es un tanto extrana, pues su significado procedural pareciera ser de segundo orden.
83
j
j
5
'
&
(
(
&
6
&
6
)
)
j
(
'
5
El predicado
esta predefinido en P ROLOG y se escribe
reglas anteriores se pueden escribir como:
84
. Las
de la si-
j
5
j
4
4
'
'
j
|
j
4
Entrada y Salida
86
&
'
que, es equivalente a:
En P ROLOG es posible realizar lectura desde varios archivos de entrada y escritura a varios archivos de salida. La entrada desde el
teclado y la salida a la pantalla se tratan igual que los archivos comunes de entrada y salida respectivamente.
El manejo de la Entrada y Salida de datos muchas veces vara de implementacion a implementacion. Nosotros usaremos una de las formas mas comunes del manejo de entrada y salida, la cual se origino
en las primeras implementaciones de P ROLOG en maquinas DEC10.
2.2
85
0
)
0
0
.
0
(
&
'
%
'
:-
9A
D
o
A
H
D
o
@
A
9A
o
?
87
&
&
'
'
4
'
5
&
%
%
1
'
88
&
'
'
&
'
&
Esta librera incluye definiciones para operaciones sobre listas. Por ejemplo,
, etc. En el futuro, utilizaremos manejo de listas en base a los procedimientos de esta librera.
que, es equivalente a:
.
Otra forma de leer archivos es mediante el predicado
Que tambien recibe una lista de archivos. La diferencia es que cada
conjunto de reglas que aparezca en un archivo, para definir un predicado, reemplazara a cualquier definicion existente anteriormente.
Por ejemplo
'
4
%
&
}
(
&
&
'
&
'
}
}
90
89
)
(
&
.
)
(
'
j
5
&
%
'
'
&
%
'
1
,
)
(
.
}
&
}
en el archivo
}
'
Escribira
92
&
El predicado
se satisface cuando su argumento unifica
con el flujo de salida en uso.
, la proxima ope-
91
(
j
}
(
j
'
j
}
|
|
|
|
,
|
0
|
0
&.
.
&
'
'
Ahora definimos que caracteres son validos como parte de una palabra:
se define como:
94
En primer termino, especificaremos que caracteres pueden ser utilizados para terminar la entrada de una oracion. Ademas, especificamos cuales constituyen caracteres de puntuacion validos.
El predicado
93
1
j
}
'
|
'
'
'
%
(
'
$
|
|
"
,
'
"
"
'
'
La primera regla dice que si se ha ledo un caracter terminal, entonces no hay nada mas que hacer. El
se incluye para evitar
que se intente resatisfacer este predicado, puesto que ello forzara a
continuar la lectura. La segunda regla tiene exactamente la misma
, excepto que el primer
estructura que la regla para
caracter a considerar se recibe como argumento y no es necesario
leerlo.
95
(
,
0
'
j
)
v
|
|
|
'
'
'
96
98
El predicado
que se satisface si su argumento es una variable
corresponde a la negacion
no unificada. El predicado
del anterior. Por ejemplo:
&
'
%
&
7
&
'
&
7
4
7
&
'
En el segundo ejemplo
se satisface, pues en ese
momento, las variables involucradas estan unificadas.
El operador
se utiliza para comparar terminos. Si T1 y
T2 se satisface cuando ambos
T2 son terminos, entonces T1
terminos son literalmente iguales. Por ejemplo:
El operador
es la negacion del operador anterior. Si T1 y
T2 son terminos, entonces T1
T2 se satisface cuando ambos
terminos son literalmente diferentes.
Manipulacion de Terminos
2.3
97
v
v
&
v
%
'
s
4
El predicado
es verdadero si su argumento no contiene variables no unificadas.
99
El predicado
es verdadero si su argumento es un termino
no numerico de aridad cero.
&
5
&
1
'
s
5
%
0
&
100
Ademas,
se satisface si su segundo y tercer argumentos estan instanciados al nombre y aridad del primer argumento. Por ejemplo:
El predicado
se satisface si su argumento esta instanciado como un termino compuesto, es decir, de aridad mayor
que 0. Por ejemplo:
Los predicados
son verdaderos si los argumentos que reciben son de los tipos correspondientes.
El predicado
se satisface si su primer argumento esta
instanciado con un termino compuesto, el segundo argumento es
el nombre del functor asociado al termino y el tercer argumento
es la aridad del termino. Por ejemplo:
'
&
&
4
&
|
%
'
5
'
%
&
4
'
1
#
recibe un numero entero , un termino , ambos instanciados, y retorna verdadero si su tercer argumento corresponde
al -esimo argumento de . Por ejemplo:
101
&
(
0
t
5
&
'
0
%
&
&
'
2
&
s
'
5
&
%
4
-
&
&
'
El predicado
permite descomponer un functor en sus componentes. Si el primer argumento esta instanciado como un
termino atomico (no numerico) o compuesto, entonces el predicado sera verdadero si el segundo argumento unifica con la
descomposicion del termino en una lista. Por ejemplo:
102
El predicado
se satisface cuando recibe un a tomo y un
string como argumentos y el nombre del a tomo corresponde con
el string. Por ejemplo:
)
)
&
"
[
[
&
(
,
'
2
%
5
4
s
-
1
'
s
104
2.4
103
1
Para consultar por la existencia de una clausula asociada a un predi. Por ejemplo:
cado determinado, se utiliza el predicado
105
'
&
'
V
4
t
'
Por ejemplo:
Los predicados
mo argumento.
106
|
|
4
&
'
|
|
|
&
&
'
&
6
&
'
%
t
'
|
&
6
'
'
&
'
108
&
Por ejemplo:
El predicado
recibe una clausula como argumento y elimina la primera clausula del programa que unifique con e sta.
'
&
&
&
'
&
'
'
&
&
'
107
'
&
'
&
%
%
'
'
Estos predicados encuentran todas las soluciones para el objetivo dado. Por ejemplo:
110
Es comun que uno quiera encontrar todas las soluciones para una
determinada consulta.
2.5
109
%
&
6
)
&
)
)
)
)
)
,
,
,
t
'
111
El objetivo
se debe interpretar como:
encontrar todas las soluciones para , tal que existe un tal que
es verdadero. As observaremos:
0
&
&
5
5
&
6
j
'
4
6
&
6
&
6
4
)
&
5
'
j
5
4
112
Estructuras de Datos
|
'
V
7
4
|
|
La propiedad basica de un a rbol binario de busqueda es que la informacion asociada al nodo raz es mayor o igual que la informacion
almacenada en los nodos del sub-arbol izquierdo y menor que la informacion almacenada en los nodos del sub-arbol derecho.
y que definen
En P ROLOG, existen los predicados
una relacion de orden entre terminos del lenguaje (este orden coincide con el orden numerico para terminos numericos y con el orden
alfabetico para a tomos no numericos).
Un a rbol binario de uso comun es un a rbol binario de busqueda. Estos a rboles se pueden definir cuando existe una relacion de orden
total para los datos que se almacenan en los nodos.
Susana
Pedro
Juan
Andres
Rodrigo
Luis
Julian
Ana
Roberto
Jaime
Laura
Donde el a tomo
Cada hijo puede ser vaco, o bien puede ser otro a rbol binario.
114
En P ROLOG los terminos del lenguaje se utilizan para formar estructuras de datos complejas.
2.6
113
1
115
v
&
116
|
&
v
|
v
|
v
|
|
v
|
'
2
Cuando P ROLOG presenta una unificacion, no la presenta formateada. El formato fue agregado para mejorar la
legibilidad del resultado.
v
'
+
+
'
+
+
|
)
#
'
%
#
&
6
'
|
|
&
5
)
%
|
(
'
5
%
'
'
'
118
Una caracterstica interesante de P ROLOG es que los terminos pueden contener variables, las cuales pueden no estar unificadas.
117
#
5
'
'
'
119
'
'
0
(
&
6
'
)
#
'
&
'
'
'
&
'
As, resulta: