You are on page 1of 7

Prolog: utilizacin de predicados de entrada y salida, unificacin, aritmtica en prolog y listas

Emilia Maribel Alvarado Fernndez e-mail: emily_1993fernandez@hotmail.es ngel Humberto Mosquera Coronel e-mail: angelkakashy19992@gmail.com Carlos Lenidas Souzza Moreira e-mail: carlossouzza1993@hotmail.com

Resumen
Prolog es un lenguaje de programacin declarativo, que cuenta con una infinidad de componentes para desarrollar SBC. El presente documento, se muestra la utilizacin de ciertos componentes de prolog que ayudan al desarrollo de un sistema basado en conocimientos, de los cuales en este trabajo profundizaremos en cuatro componentes explicando su funcionamiento y su teora, tratando que este documento sea de un gran intuitivo para el aprendizaje de dichos componentes.

componentes no tengan la misma relevancia o importancia de los que se trata en este documento. Los temas a tratar en el desarrollo de este trabajo son: predicados de entrada y salida, unificacin, aritmtica en prolog y listas de los cuales se explicara que son, para que sirven, cul es su funcionamiento, como se usan (sintaxis), tratando que este trabajo tenga un enfoque terico-prctico definiendo su teora y su implementacin

Desarrollo
PROLOG cuenta con una gran variedad de elementos o componentes que lo hace un lenguaje declarativo de los cuales a continuacin detallaremos 4 de ellos: Predicados de entrada y salida Unificacin Aritmtica en prolog Lista

Palabras clave
Sistemas basados en conocimientos (SBC), prolog, predicados de entrada y salida, unificacin, operadores, tomos, clausulas (hechos)

Introduccin
La creacin de un sistema basado en conocimientos en prolog requiere la utilizacin de varios componentes al momento de su formacin, todos y cada uno de ellos juegan un papel muy importante en el desarrollo de un SBC. En este trabajo se explicara cuatro componentes de prolog, pero esto no quiere decir que los dems

Predicados de Entrada y Salida


Los predicados de entrada y salida no tienen nada que ver con la lgica, pero si tienen mucho que ver si estemos interesados en una mayor interaccin entre programa y usuario; permitiendo al usuario agregar entradas y brindar

salidas al mismo, esto fue lo que dio lugar a los predicados de Entrada/Salida, que para mantener la consistencia del sistema cumplen los siguientes tem: Se evalan siempre a verdad Nunca se pueden re satisfacer: la reevaluacin contina hacia la izquierda Tiene un efecto lateral (efecto no lgico durante su ejecucin): entrada o salida de un carcter. Lectura y escritura de trminos write(+Termino). Si Termino est instanciada a otro trmino, lo imprime en pantalla. Si Termino no est instanciado, se imprime por pantalla una variable numerada nl . Nueva Lnea, se usa como un salto de lnea. write_ln(+Termino). Usa los anteriores en un mismo comando. writef(+Formato,+Argumentos). Escritura con formato. tab(+X). se utiliza para dar espacios en blanco. display(+Termino) . es idntico a write, exento que pasa por alto cualquier declaracin. read(-Termino). Se usa para la lectura de cualquier termino que entre por teclado Lectura y escritura de caracteres Un carcter es la unidad ms pequea que se puede leer y escribir, Prolog interpreta a los caracteres en forma correspondientes a su cdigo ASCII. put(+Caracter). Si el Caracter est instanciado en el rango entre 0 y 255, imprime en pantalla el carcter que pertenece al cdigo ASCII. dos

get(-Caracter). Lee caracteres, instanciando Caracter al primer carcter que se imprime. Si Caracter est instanciada, los comparar satisfacindose o fracasando. get0(-Caracter). Igual que el anterior, sin importarle el tipo de carcter tecleado. skip(+Caracter) Lee del teclado hasta el carcter Caracter o el final del fichero.

Unificacin
La unificacin es una regla que permite obtener respuesta de una pregunta formulada a una programacin lgica, para prolog la unificacin en uno de los mecanismos ms importantes el cual consiste en buscar instancias comunes entre dos tomos, en el cual uno est en la cabeza y el otro en el cuerpo de la clusula. Lo que hace prolog es tratar de hacerlos coincidir mediante reglas: Una variable puede ser instanciada a cualquier tipo de trmino (numrico, alfanumrico, etc.), y con otra variable ejemplo: Si X es una variable no instanciada, y si Y est instanciada a cualquier trmino, entonces X e Y son iguales, y X quedar instanciada a lo que valga Y. Si ambas estn no instanciadas, el objetivo se satisface y las dos variables quedan compartidas, cuando una quede instanciada la otra igual. En el caso de nmeros y tomos son iguales a s mismo y se instancian con una variable Para que dos estructuras sean iguales deben poseer el mismo nombre y nmero de argumento La igualdad es un operador infijo que unifica expresiones Un objetivo con el predicado no igual (\=) se satisface si el

igual fracasa y fracasa si el igual se satisface.

Aritmtica en prolog
La aritmtica en uno de los componentes que no debe quedar exento de prolog. Como sabemos en la unificacin no se evalan sus expresiones para esto tenemos el operador is que antes de hacer la unificacin evala la parte a unificar como una expresin aritmtica. X is 3 + 2 es equivalente a X = evaluar(3 + 2) Esto se puede llevar a cabo si la parte derecha no tiene ninguna variable sin instanciar, si no dar error Existen varios operadores para comparar expresiones aritmticas. Estos operadores evalan sus dos operando antes de realizar la comparacin. OPERADORES Prolog tiene definido los operadores aritmticos y relacionales a si mismo su precedencia A continuacin se muestran los operadores aritmticos y relacionales que se pueden utilizar para construir Expresiones: X+Y /*suma*/ X-Y /*resta*/ X*Y /*multiplicacin*/ X/Y X div Y /*divisin real y entera*/ X mod Y /*resto de la divisin de X entre Y*/ X^Y /*X elevado a Y*/ -X /*negacin*/ X=Y /*igual*/ X/=Y /*distintos*/ X>Y /*mayor */ X<Y /*menor */ X=>Y /*mayor igual*/ X=<Y /*menor igual*/

Prolog tambin incorpora funciones aritmticas (abs, sig, min, max, random, round, integer, float, sqrt, sin, cos, tan, log, log10, exp, ...). abs(X) /*valor absoluto de X*/ acos(X) /*arco coseno de X*/ asen(X) /*arco seno de X*/ atan(X) /*arco tangente de X*/ cos(X) /*coseno de X*/ exp(X) /*exponencial de X; [eX]*/ ln(X) /*logaritmo neperiano de X*/ log(X) /*logaritmo en base 2 de X*/ sin(X) /*seno de X*/ sqrt(X) /*raz cuadrada de X*/ tan(X) /*tangente de X*/ round(X,N) /*redondeo del real X con N decimales*/ Ciclos En Prolog, casi no se usan ciclos, sin embargo, se pueden implementar. Ejem. Para mostrar los nmeros del M al N se usa: lista(M, N):- M<N, nl, write(M), NuevoM is M+1, lista(NuevoM, N).

Listas en PROLOG
Una lista no es nada ms que una estructura de datos simples usada en la programacin no numrica, tambin se define como una secuencia de elementos por ejemplo: clara,tomas,jose,isabel En prolog se encierran los datos en corchetes [clara,tomas,jose,isabel] La representacin interna de una lista en prolog son como un rbol, donde el primer elemento es la cabeza de la lista y los dems son las colas o resto.

clara tomas jose isabel []

los elementos pueden ser incluso otras listas Ejemplo [ ana, [maria, juan], agustin ] PROLOG representar como un rbol: internamente

ana

Existen dos tipos de listas las vacas y las no vacas, la lista vaca se define como un tomo en prolog [] y en el segundo caso la lista se compone de dos partes, el primer elemento se considera la cabeza y el segundo la cola o resto En el ejemplo anterior, la cabeza ser clara y la cola [tomas,jose,isabel]. Aunque como hemos visto anteriormente no es necesario, en general la estructura lista se representa en PROLOG con el nombre de predicado o funtor. Ejemplo 2.1 .(clara,.(tomas,.(jose,.(isabel,[])))) Que PROLOG representar internamente como un rbol:


[] agustin []

maria juan

Resultados
Para el mejor entendimiento de la utilizacin de los componentes explicados en el trabajo, se ha definido ejercicios bsicos en donde se demuestra la utilizacin e implementacin de los mismos Predicados de entrada y salida: Regla que interacta con el usuario imprimiendo en pantalla mensajes y pidiendo el ingreso de datos hola :-write('Nombre: '), read(Nombre),

clara tomas jose isabel


[]

write('Primer read(Apellido1), write('Segundo read(Apellido2), nl,

Apellido: Apellido:

'), '),

write('Hola '), write(Nombre), tab(1), write(Apellido1), write(Apellido2). tab(1),

En toda lista el ltimo elemento siempre es la lista vaca ([]). La utilizacin de las lista en prolog es muy usual, las notaciones se utilizan simplificadas con corchetes que es lo mismo que la imagen anterior ([clara, tomas, jose, isabel]). Prolog en su interior lo interpreta como rbol donde

Utilizacion del put debuelve el carcter correspondiente al codigo ASCII

Consultas

Unificacin y aritmtica

Ejemplo 2 utilizaciones de operadores relacionales Ejemplo1 de instanciacin de una variable y utilizacin de operador / divisin

?-lista([H,J|T]). H=1 J=2 T=[3] Longitud de una lista longitud([],0). longitud([_|T],N):-longitud(T,N0), N is N0 + 1. ?- longitud([a,b,c],L). L=3 Bsqueda de un elemento pertenece(X,[X|_]) . pertenece(X,[_|R]):- pertenece(X,R). ?- pertenece(b,[a,b,c]). Yes Eliminar elemento de una lista elimina(X,[X|T],T). Listas Creacin, Longitud, Bsqueda, Eliminacin plantas([manzana, naranja, espinaca, gardenia, alfalfa, lista([1,2,3]) ?-lista([H|T]). H=1 T=[2,3] X = 3, Y = [1,2] limon, pino]). ?- elimina(1,[1,2,3,4],R). R = [2,3,4] elimina(X,[H|T],[H|T1]):elimina(X,T,T1).

References
Amble, 1987 Amble, Tore Logic Programming and Knowledge Engineering Ed. Addison-Wesley, 1987 Berk, 1986 Berk, A.A. PROLOG. Programacin y aplicaciones en Inteligencia Artificial Ed. ANAYA Multime., S.A., 1986 Bratko, 1990 Bratko, Ivan PROLOG Programming for Artificial Intelligence Addison-Wesley, second ed., 1990 Clocksin, 1997

Clocksin, William F. Clause and Effect. Prolog Programming for the Working Programmer Springer-Verlag, 1997

You might also like