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®las', 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