Sie sind auf Seite 1von 12

FUNDAMENTOS DE PROLOG

El desarrollo de Prolog se inici en 1970 con Alain Coulmeauer y


Philippe Roussel, quienes estaban interesados en desarrollar un lenguae para
hacer deducciones a partir de te!to" El nombre corresponde a #Programming in
$ogic% &Programacin en lgica'"
Prolog (ue desarrollado en )arsella, *rancia, en 197+" El principio de
resolucin de ,o-als.i, de la /ni0ersidad de Edimburgo pareci un modelo
apropiado para desarrollar sobre 1l mecanismo de in(erencia" Con la limitacin
de de la resolucin de cl2usulas de 3orn, la uni(icacin conduo a un sistema
e(ica4 donde el no5determinismo inherente de la resolucin se mane por
medio de un proceso de e!ploracin a la in0ersa, el cual se pod6a implementar
con (acilidad"
$a primera implementacin de Prolog se complet en 197+ usando el
compilador de A$78$ 9 de 9irth y los aspectos b2sicos del lenguae actual se
concluyeron en 197:" El uso de Prolog se e!tendi gradualmente entre quienes
se dedicaban a la programacin lgica principalmente por contacto personal y
no a tra01s de una comerciali4acin del producto" E!isten 0arias 0ersiones
di(erentes, aunque bastante similares" Aunque no hay un est2ndar del Prolog,
la 0ersin desarrollada en la /ni0ersidad de Edimburgo ha llegado a ser
utili4ada ampliamente" El uso de este lenguae no se e!tendi sino hasta los
a;os ochenta" $a (alta de desarrollo de aplicaciones e(icaces de Prolog inhibi
su di(usin"
/n programa en Prolog se compone de una serie de hechos, relaciones
concretas entre obetos de datos &hechos' y un conunto de clausulas&reglas',
es decir, un patrn de relaciones entre los obetos de la base de datos< #=i es
0erdad el antecendente, entonces es 0erdad el consecuente#" Estos hechos y
reglas se introducen en la base de datos a tra01s de una operacin de
consulta"
>o obstante, la (orma de escribir las cl2usulas es al contrario de lo
habitual" Primero se escribe el consecuente y luego el antecedente" El
antecedente puede ser una conuncin de condiciones que se denomina
secuencia de obeti0os" Cada obeti0o se separa con una coma y puede
considerarse similar a una instruccin o llamada a procedimiento de los
lenguaes imperati0os" En Prolog no e!isten instrucciones de control" =u
eecucin se basa en dos conceptos? la uni(icacin y el bac.trac.ing" 7racias a
la uni(icacin, cada obeti0o determina un subconunto de cl2usulas
susceptibles de ser eecutadas" Cada una de ellas se denomina punto de
eleccin" Prolog selecciona el primer punto de eleccin y sigue eecutando el
programa hasta determinar si el obeti0o es 0erdadero o (also" En caso de ser
(also entra en uego el @bac.trac.ing@, que consiste en deshacer todo lo
eecutado situando el programa en el mismo estado en el que estaba usto
antes de llegar al punto de eleccin" Entonces se toma el siguiente punto de
eleccin que estaba pendiente y se repite de nue0o el proceso" Aodos los
obeti0os terminan su eecucin bien en #0erdadero#, bien en #(also#"
Ejemplo de Cdigo Prolog
BB
BB declaraciones
BB
padre&@uan@, @maria@'" B uan es padre de maria
padre&@pablo@, @uan@'" B pablo es padre de uan
padre&@pablo@, @marcela@'"
padre&@carlos@, @debora@'"
B A es hio de C si C es padre de A
hiode&A,C' ?5 padrede&C,A'"
B A es abuelo de C si A es padre de C y C es padre C
abuelode&A,C' ?5
padrede&A,C',
padrede&C, C'"
B A y C son hermanos si el padre de A es tambi1n el padre de C y si A y C no
son lo mismo
hermanode&A,C' ?5
padrede&C,A' ,
padrede&C,C',
A DEE C"
B A y C son (amiliares si A es padre de C o A es hio de C o A es hermano de C
(amiliarde&A,C' ?5
padrede&A,C'"
(amiliarde&A,C' ?5
hiode&A,C'"
(amiliarde&A,C' ?5
hermanode&A,C'"
BB
BB consultas
BB
B uan es hermano de marcelaF
F5 hermanode&@uan@, @marcela@'"
yes
B carlos es hermano de uanF
F5 hermanode&@carlos@, @uan@'"
no
B pablo es abuelo de mariaF
F5 abuelode&@pablo@, @maria@'"
yes
B maria es abuelo de pabloF
F5 abuelode&@maria@, @pablo@'"
no
/n programa se eecuta cuando el usuario introduce una pregunta un
conunto de t1rminos que deben ser todos ciertos" $os hechos y las reglas de la
base de datos se usan para determinar cu2les sustituciones de 0ariables de la
pregunta &llamadas uni(icacin' son congruentes con la in(ormacin de la base
de datos"
Como int1rprete, Prolog solicita entradas al usuario" El usuario digita una
pregunta o un nombre de (uncin" $a 0erdad &#si#' o (alsedad &#no#' de esa
pregunta se imprime, as6 como una asignacin a las 0ariables de la pregunta
que hacen cierta la pregunta, es decir que uni(ican la pregunta" =i se introduce
un # < # , entonces se imprime el pr!imo conunto de 0alores que uni(ican la
pregunta, hasta que no son posibles m2s sustituciones, momento en el que
Prolog imprime #no# y aguarda una nue0a pregunta" /n cambio de rengln se
interpreta como terminacin de la bGsqueda de soluciones adicionales"
$a eecucin de Prolog, aunque se basa en la especi(icacin de
predicados, opera en (orma muy parecida a un lenguae aplicati0o como $H=P o
)$" El desarrollo de las reglas en Prolog requiere el mismo #pensamiento
recursi0o# que se necesita para desarrollar programas en esos otros lenguaes
aplicati0os"
Prolog tiene una sinta!is y sem2ntica simples" Puesto que busca
relaciones entre una serie de obetos, la 0ariable y la lista son las estructuras
de datos b2sicas que se usan" /na regla se comporta en (orma muy parecida a
un procedimiento, e!cepto que el concepto de uni(icacin es m2s compleo que
el proceso relati0amente sencillo de sustitucin de par2metros por e!presiones"
Evaluaci del leguaje
Prolog ha alcan4ado una medida ra4onable de 1!ito como lenguae para
resol0er problemas de relaciones, como el procesamiento de consultas a bases
de datos" 3a alcan4ado un 1!ito limitado en otros dominios"
El obeti0o original de poder especi(icar un programa sin proporcionar
sus detalles algor6tmicos no se ha alcan4ado realmente" $os programas en
Prolog #se leen secuencialmente#, aunque el desarrollo de reglas sigue un
estilo aplicati0o" =e usan cortes con (recuencia para limitar el espacio de
bGsqueda para una regla, con el e(ecto de hacer el programa tan lineal en
cuanto a eecucin como un programa t6pico de C o Pascal" Aunque las reglas
se suelen e!presar en (orma aplicati0a, el lado derecho de cada regla se
procesa de manera secuencial" Esto sigue un patrn muy similar al de los
programas en )$"
!aria"le#
=us 0ariables son locales, es decir, si dos cl2usulas contienen una
0ariable llamada I, estas IJs son dos 0ariables di(erentes" Estas se podr2n
uni(icar &acotar' entre si y al tomar una de ellas algGn 0alor, la otra
autom2ticamente tomara el mismo 0alor"
!aria"le# lgica#
$as 02riables en Prolog no son 0ariables en el sentido habitual, por eso
las llamamos 0ariables lgicas" =e escriben como una secuencia de caracteres
al(ab1ticos comen4ando siempre por mayGscula o subrayado" Eemplos de
0ariables?
Kariable
L3ola
L

Pero no son 0ariables?
Kariable
M3ola
pLL

El hecho de que los nombres de 0ariables comiencen por mayGscula &o
subrayado' e0ita la necesidad de declarar pre0iamente y de manera e!pl6cita
las 0ariables, tal y como ocurre en otros lenguaes"
!aria"le Aima
/n car2cter de subrayado representa a la 0ariable annima" /na
0ariable annima se usa cuando se desea ignorar algGn 0alor que no es de
inter1s"
$a 0ariable annima se usa en lugar de cualquier otra 0ariable" $a di(erencia es
que la 0ariable annima nunca se 0a a acotar &asociar' a algGn 0alor"
=6, s6, e!isten 0ariables sin nombre, y todas ellas se representan
mediante el s6mbolo de subrayado L" Pero cuidado, aunque todas las 0ariables
annimas se escriben igual, son todas distintas" Es decir, mientras que dos
apariciones de la secuencia de caracteres 3ola se re(ieren a la misma 0ariable,
dos apariciones de la secuencia L se re(ieren a 0ariables distintas"
El Mecai#mo De Ui$icaci
$a uni(icacin es el mecanismo mediante el cu2l las 0ariables lgicas
toman 0alor en Prolog" El 0alor que puede tomar una 0ariable consiste en
cualquier t1rmino, por eemplo, &:', +:"+, @hola que tal@, etc" Por eso decimos
que los datos que manea Prolog son t1rminos"
Cuando una 0ariable no tiene 0alor se dice que est2 libre" Pero una 0e4
que se le asigna 0alor, 1ste ya no cambia, por eso se dice que la 0ariable est2
ligada"
=e dice que dos t1rminos uni(ican cuando e!iste una posible ligadura
&asignacin de 0alor' de las 0ariables tal que ambos t1rminos son id1nticos
sustituyendo las 0ariables por dichos 0alores" Por eemplo? a&I,:' y a&N,O'
uni(ican dando 0alores a las 0ariables? I 0ale N, O 0ale :" 8bs1r0ese que las
0ariables de ambos t1rminos entran en uego"
Por otra parte, no todas las 0ariables estan obligadas a quedar ligadas"
Por eemplo? h&I' y h&P' uni(ican aunque las 0ariables I e P no quedan ligadas"
>o obstante , ambas 0ariables permanecen uni(icadas entre s6" =i
posteriormente ligamos I al 0alor &:' &por eemplo', entonces autom2ticamente
la 0ariable P tomar2 ese mismo 0alor" $o que esta ocurriendo es que, al uni(icar
los t1rminos dados, se impone la restriccin de que I e P deben tomar el
mismo 0alor aunque en ese preciso instante no se cono4ca dicho 0alor"
$a uni(icacin no debe con(undirse con la asignacin de los lenguaes
imperati0os puesto que representa la igualdad lgica" )uchas 0eces uni(icamos
0ariables con t1rminos directamente y de manera e!pl6cita &ya 0eremos como
se hace esto', por eemplo,I y :QQ" Esto pro0oca la sensacin de que estamos
asignando 0alores a las 0ariables al estilo imperati0o"
Para saber si dos t1rminos uni(ican podemos aplicar las siguientes normas?
/na 0ariable siempre uni(ica con un t1rmino, quedando 1sta ligada a
dicho t1rmino"
Ros 0ariables siempre uni(ican entre s6, adem2s, cuando una de ellas se
liga a un t1rmino, todas las que uni(ican se ligan a dicho t1rmino"
Para que dos t1rminos uni(iquen, deben tener el mismo (unctor y la
misma aridad" Respu1s se comprueba que los argumentos uni(ican uno
a uno manteniendo las ligaduras que se produ4can en cada uno"
=i dos t1rminos no uni(ican, ninguna 0ariable queda ligada"
Predicado# % O"je&ivo#
$os predicados son los elementos eecutables en Prolog" En muchos
sentidos se asemean a los procedimientos o (unciones t6picos de los lenguaes
imperati0os"
/na llamada concreta a un predicado, con unos argumentos concretos,
se denomina obeti0o &en ingl1s, goal'" Aodos los obeti0os tiene un resultado
de 1!ito o (allo tras su eecucin indicando si el predicado es cierto para los
argumentos dados, o por el contrario, es (also"
Cuando un obeti0o tiene 1!ito las 0ariables libres que aparecen en los
argumentos pueden quedar ligadas" Estos son los 0alores que hacen cierto el
predicado" =i el predicado (alla, no ocurren ligaduras en las 0ariables libres"
Eemplos?
El caso m2s b2sico es aqu1l que no contiene 0ariables? sonL
hermanos&@Suan@,@)aria@'" Este obeti0o slamente puede tener una solucin
&0erdadero o (also'"
=i utili4amos una 0ariable libre? sonLhermanos&@Suan@,I', es posible que e!istan
0arios 0alores para dicha 0ariable que hacen cierto el obeti0o" Por eemplo
para I E @)aria@, y para I E @$uis@"
Aambi1n es posible tener 0arias 0ariables libres? sonLhermanos&P,O'" En este
caso obtenemos todas las combinaciones de ligaduras para las 0ariables que
hacen cierto el obeti0o" Por eemplo, I E @Suan@ y O E @)aria@ es una solucin" I
E @Suan@ y O E @$uis@ es otra solucin"
Secuecia# de o"je&ivo#
En Prolog los obeti0os se pueden combinar mediante conecti0as propias
de la lgica de primer orden? la conuncin, la disyuncin y la negacin"
$a disyuncin se utili4a bien poco y la negacin requiere todo un cap6tulo
para ser e!plicada" En cambi la conuncin es la manera habitual de eecutar
secuencias de obeti0os"
El operador de conuncin es la coma, por eemplo?
edad&luis,P',edad&uan,O',ITO" Parece sencillo, pero hay que tener en cuenta
qu1 ocurre con las ligaduras de las 0ariables?
En primer lugar, hay que ser consciente de que los obeti0os se eecutan
secuencialmente por orden de escritura &es decir, de i4quierda a
derecha'"
=i un obeti0o (alla, los siguientes obeti0os ya no se eecutan" Adem2s la
conuncin, en total, (alla"
=i un obeti0o tiene 1!ito, algunas o todas sus 0ariables quedan ligadas,
y por tanto, dean de ser 0ariables libres para el resto de obeti0os en la
secuencia"
=i todos los obeti0os tienen 1!ito, la conuncin tiene 1!ito y mantiene
las ligaduras de los obeti0os que la componen"
=upongamos que la edad de $uis es :+ a;os, y la edad de Suan es +Q?
$a eecucin del primer obeti0o tiene 1!ito y liga la 0ariable #P#, que
antes estaba libre, al 0alor :+"
$$ega el momento de eecutar el segundo obeti0o" =u 0ariable #O#
tambi1n estaba libre, pero el obeti0o tiene 1!ito y liga dicha 0ariable al
0alor +Q"
=e eecuta el tercer obeti0o, pero sus 0ariables ya no estan libres
porque (ueron ligadas en los obeti0os anteriores" Como el 0alor de #P#
es mayor que el de #O# la comparacin tiene 1!ito"
Como todos los obeti0os han tenido 1!ito, la conuncin tiene 1!ito, y
dea las 0ariables #P# y #O# ligadas a los 0alores :+ y +Q
respecti0amente"
'ac(&rac(ig
=upongamos que disponemos de dos predicados pU1 y qU1 que tienen
0arias soluciones &el orden es signi(icati0o'?
p&1' tiene 1!ito"
p&+' tiene 1!ito"
q&+' tiene 1!ito"
>o hay m2s soluciones que 1stas"
P a continuacin consideramos la siguiente secuencia? p&I',q&I'"
Ahora eecutamos la secuencia tal y como e!plicamos en la leccin anterior?
Eecutamos p&I' con 1!ito y la 0ariable queda ligada al 0alor 1 &primera
solucin'"
Eecutamos q&I', pero la 0ariable ya no esta libre, luego estamos
eecutando realmente q&1'" El predicado (alla porque no es una de sus
soluciones"
$a conuncin (alla"
El resultado ha sido (allo, pero nosotros sabemos que para I E + e!iste
una solucin para la conuncin"
Aqu6 es donde entra en uego el bac.trac.ing" Esto consiste en recordar
los momentos de la eecucin donde un obeti0o ten6a 0arias soluciones para
posteriormente dar marc)a a&r*# y seguir la eecucin utili4ando otra solucin
como alternati0a"
El bac.trac.ing (unciona de la siguiente manera?
Cuando se 0a eecutar un obeti0o, Prolog sabe de antemano cuantas
soluciones alternati0as puede tener" En un (uturo cap6tulo 0eremos cmo
puede llegar a saber esto" Cada una de las alternati0as se denomina
punto de eleccin" Richos puntos de eleccin se anotan internamente y
de (orma ordenada" Para ser e!actos, se introducen en una pila"
=e escoge el primer punto de eleccin y se eecuta el obeti0o
eliminando el punto de eleccin en el proceso"
=i el obeti0o tiene 1!ito se continGa con el siguiente obeti0o aplic2ndole
estas mismas normas"
=i el obeti0o (alla, Prolog d2 marcha atr2s recorriendo los obeti0os que
anteriormente s6 tu0ieron 1!ito &en orden in0erso' y deshaciendo las
ligaduras de sus 0ariables" Es decir, comien4a el bac.trac.ing"
Cuando uno de esos obeti0os tiene un punto de eleccin anotado, se
detiene el bac.trac.ing y se eecuta de nue0o dicho obeti0o usando la
solucin alternati0a" $as 0ariables se ligan a la nue0a solucin y la
eecucin continGa de nue0o hacia adelante" El punto de eleccin se
elimina en el proceso"
El proceso se repite mientras haya obeti0os y puntos de eleccin
anotados" Re hecho, se puede decir que un programa Prolog ha
terminado su eecucin cuando no le quedan puntos de eleccin
anotados ni obeti0os por eecutar en la secuencia"
Adem2s, los puntos de eleccin se mantienen aunque al (inal la
conuncin tenga 1!ito" Esto permite posteriormente conocer todas las
soluciones posibles"
CONCLUS+,N
Prolog esta basado en las cl2usulas de 3orn, el cual es un subconunto
de un sistema (ormal llamado $gica de Predicados" $a logica de predicados es
una manera sencilla de representar la (orma como se ra4ona"
En Prolog, se llega a una solucin in(iri1ndola desde algo ya conocido"
A6picamente, un programa en Prolog no es una secuencia de acciones, sino
una coleccin de hechos que unto con reglas permiten obtener soluciones o
llegar a conclusiones utili4ando los hechos ya establecidos"
Prolog utili4a una 0ariacin simpli(icada de la lgica de predicados que
nos pro0ee una sinta!is (2cil de entender muy similar a la de lenguae natural"
Prolog tambi1n incluye una maquina de in(erencias la cual procesa lgicamente
la in(ormacin.
'+'L+OGRAF-A
http?UUVN"+::"1W7"10NUsearchFqEcache?NSC5
Ktgg3:XS?---"etse"ur0"esUEngHn(UassigUiaiU$aboratorisUPrologUHntroduccionProl
og"pd(YconceptoYdeYclausulasYdeYhornZhlEesZlrElangLes
http?UU---"so(t-are5shop"comUProductosUPrologU(undamentosprolog"html

Das könnte Ihnen auch gefallen