UNIVERSIDAD DE PANAMÁ CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y COMUNICACIÓN MONOGRAFÍA: ORGANIZACIÓN Y ESTRUCTURA DE PROLOG PRESENTA: LEONARDO ANDRES BATISTA GONZALES 2019 TABLA DE CONTENIDOS TABLA DE CONTENIDOS ................................................................................... II TABLA DE ILUSTRACIONES ............................................................................. IV 1. INTRODUCCIÓN ............................................................................ 1 2. CONSULTAS .................................................................................. 1 3. COMENTARIOS ............................................................................. 3 4. CLAUSULAS Y RELACIONES ....................................................... 3 5. BACKTRACKING ............................................................................ 4 6. LISTAS............................................................................................ 5 7. OPERADORES DE CORTE Y FALLO............................................ 7 8. MANEJO DE LISTAS ...................................................................... 8 8.1 ARIDAD .......................................................................................... 8 8.2 CONCATENACION......................................................................... 9 8.3 RESTA .......................................................................................... 10 8.4 DUPLICAR .................................................................................... 10 9. LECTURA Y ESCRITURA ............................................................ 11 III 10. LECTURA Y ESCRITURA EN ARCHIVOS ................................... 12 11. CONCLUSIONES ......................................................................... 14 12. REFERENCIAS BIBLIOGRÁFICAS .............................................. 15 TABLA DE ILUSTRACIONES ILUSTRACION 1: HACIENDO CONSULTAS EN PROLOG ................................ 2 ILUSTRACION 2: COMENTARIO ........................................................................ 3 ILUSTRACION 3: CLAUSULA DE HORM ............................................................ 3 ILUSTRACION 4: PROCESO DE BACKTRAKING .............................................. 5 ILUSTRACION 5 :RESPENTACION DE LISATAS EN PRLOG ........................... 7 ILUSTRACION 6: EJEMPLO DE CORTE ............................................................ 8 ILUSTRACION 7: ARIDAD DE PREDICADOS CON ESTRUCTURA .................. 9 ILUSTRACION 8: CONCATENACIÓN ............................................................... 10 ILUSTRACION 9: REPRESENTANDO LA RESTA DE LISTA EN EL LENGUAJE PROLOG ............................................................................................................ 10 ILUSTRACION 10: SINTAXIS DEL PREDICADO WRITE ................................. 11 ILUSTRACION 11: SINTAXIS DEL PREDICADO DE ESCRITURA WRITF ...... 12 ILUSTRACION 12: ESCRITURA EN ARCHIVO................................................. 13 ILUSTRACION 13:LECTURA DE UN ARCHIVO ............................................... 13 1. INTRODUCCIÓN La programación de computadores ha ido evolucionando ya que cuando inicio la era de la computación para indicarle a un ordenador que hiciera dicha tarea había que re cablear los componentes de este, pero más tarde debido a la organización arquitectura de los computadores se pudieron realizar ordenes sin re cablear ningún componente a la computadora para que hiciera una tarea y esto simplemente con una cuantas líneas de comandos que la computadora entendía y es ahí donde nace la programación de computadores. Sin embargo, bajo la programación, de computadores subyace todo un mundo complejo de lenguajes y paradigmas de programación que posibilitan la resolución de problemas del mundo real mediante una secuencia de pasos o comando que se le indica al ordenador. Entre los paradigmas de programación que se conoce es la programación declarativa que se usa en el lenguaje prolog y otros paradigmas como el orientado a objetos. En esta monografía se considera la organización y estructura del lenguaje lógico prolog los aspectos más importantes que definen a este lenguaje es que, trabaja bajo el paradigma programación declarativo. 2. CONSULTAS Las consultas o preguntas en prolog, se representa igual que un hecho salvo lleva antes un símbolo. de interrogación y guion. Además, esta se hace a través de un terminal que trae el lenguaje de programación prolog. [1] Al hacer una consulta a un programa en prolog, internamente este efectuará una búsqueda en la base de conocimiento del programa, buscando de esta forma un 2 hecho que coincida con el hecho consultado o preguntado y si estos coinciden es porque sus predicado y argumentos son idénticos. [1] Una manera de que prolog encontró el hecho consultado es marcando un mensaje en la terminal de ejecución del programa como true y cuando no es false, en relación de true y false estos pueden aparecer como yes o no en otras versiones de lenguaje. [1, 1] ILUSTRACION 1: haciendo consultas en prolog Observe en la imagen que cuando consulto fruta(mango) arroja falso aunque el mango en si es una fruta, esto pasa por algo que se conoce en prolog el universo cerrado que simplemente el da por cierto todo lo que le escribimos en su base de conocimiento 3 3. COMENTARIOS Los comentarios en prolog pueden escribirse con el símbolo de porcentaje antes de escribir la frase que deseamos comentar, de igual forma se puede escribe con una barra inclinada a la derecha seguido de un asterisco y seguido la frase que se quiere comentar luego sigue un asterisco y la barra inclinada a la derecha, para ser más preciso de lo que dije observase la figura 2. ILUSTRACION 2: comentario 4. CLAUSULAS Y RELACIONES Cuando hacemos un programa en prolog este está formado o consta de un conjunto de cláusulas de horm donde la cláusula se escribe de forma general. Observe la siguiente imagen. ILUSTRACION 3: clausula de horm Fuente: [2] Podemos observar que esta cláusula se constituye de dos parte, observemos la imagen (figura3) veamos la parte más a la izquierda antes del símbolo :-, esta parte se conoce como cabeza y la que está más a la derecha o sea después del :- se le conoce cuerpo. 4 Cuando la parte de la derecha o sea 𝑝𝑚 ,y m vale 0 se dice que se trata de un hecho o afirmación y cuando no existe la parte izquierda de la cláusula se dice que este tipo de clausula se usa para la entrada y salida del programa. Es de importancia recalcar que cuando existe las dos partes de la cláusula de horm o sea la parte más izquierda y la de más a la derecha, se dice que este tipo de clausula es una regla y que nos permite discriminar las relaciones en la base de conocimiento del programa. [2] Siguiendo con el análisis de la figura3 observamos que p, p1, hasta pm son predicados donde cada uno tiene sus argumentos y estos argumentos se conocen como termino, donde cada uno de estos términos guarda relación con el predicado. [2] Las clausulas o hechos son de vital importancia ya que con estas construyes la base de conocimiento que requiere el programa para resolver un problema y mediante estos conjuntos de cláusulas se relacionan los objeto, por ejemplo padre(juan,maria). padre(jose,juan). Con estas cláusulas existe una relación donde dice que juan es padre de maría y el padre de juan es José por lo que quiere decir que existe una relación entre José y maría donde José es abuelo de maría. 5. BACKTRACKING al ejecutar un objetivo de manera eficaz prolog sabe cuántas soluciones posibles debe tener y a estas se le conoce como punto de elección donde internamente se guarda en una pila después se selecciona uno de estos puntos y se ejecuta de esta forma eliminado el punto de elección. Si el objetivo falla prolog regresa recorriendo los objetivos que tuvieron éxitos, o sea en pocas palabras se inicia el backtracking o reevaluación. [1] 5 Además, si un objetivo tiene señalado un punto de elección la reevaluación se pausa y se prueba con la siguiente solución posible y la ejecución sigue hacia adelante. En pocas palabras el backtracking es el proceso que se usa para ir a un objetivo previo para tratar de buscar otras formas de satisfacer el objetivo. [3] ILUSTRACION 4: proceso de backtraking Fuente: [3] 6. LISTAS Unas de la estructura que nos proporciona prolog son las listas. Esta son una secuencia de datos ordenados y además estas listas pueden tener longitud n o 6 sea que n>=0. Una lista en prolog puede tener como elemento de la lista variables, constantes e incluso otras estructuras. La sintaxis de una lista en prolog está conformada por par de corchetes [ ] y dentro de estos van colocados los elementos de esta, donde cada uno de estos datos ( elementos ) van separados por coma, por ejemplo [ a, b, c, d, 1, 2, 3 ]. Las listan en este lenguaje están compuestas de dos componentes esencialmente los cuales son, la cabeza, y la cola. [ cabeza | cola ] La cabeza de una lista por primera vez es el primer elemento y la cola es el resto de elemento, por ejemplo, observemos el siguiente esquema para entender: Dado esta lista [ a, b, c ] cabeza Cola a b, c a a cabeza Cola b C b En prolog seria de la siguiente forma: Cabeza cola C [] 7 [ a | [ b, c ]] [ a | [ b | [c] ] ] [ a | [ b | [ [ c | [] ] ] ] ] Como nos podremos dar cuenta el final de una lista es la lista vacía. Observe la figura4. ILUSTRACION 5 :respentacion de lisatas en prlog Fuente: [1] 7. OPERADORES DE CORTE Y FALLO El operador de corte se usa en prolog para decirle al programa cuales son las opciones previas que no necesita evaluar ya que este no lleva a una solución que no es de interés. La importancia de hacer esto es que el programa será más rápido debidos a los cortes implementados que sirve para cortar los huecos vacíos, otras de las importancias es que ocupa menos espacios de memoria en el ordenador. Hablando sintácticamente en prolog el corte se escribe como un signo de exclamación << ¡ >> y no presenta argumentos. [3] Observemos el siguiente ejemplo en la siguiente figura5. 8 ILUSTRACION 6: ejemplo de corte Fuente: [3] Unas de las aplicaciones donde se puede implementar el corte es en la manera de expresar determinismo, usar una forma de negación diferente e ignorar condiciones. 8. MANEJO DE LISTAS El manejo de lista en prolog es importante ya que con estas podemos manejar o guardar datos dentro de estas. Cuando tenemos una lista podemos tener una cantidad de elementos, por otra parte, podemos duplicar una lista, generar una lista a partir de dos listas o sea concatenarla. 8.1 ARIDAD La aridad en el lenguaje de programación prolog no es más que la cantidad de termino que contiene un predicado o lista, considere el siguiente ejemplo. 9 persona( carlos ) persona( itxy ) maridoYMujer( carlos, itxy ) maridoYMujer( itxy, carlos ) observemos que el predicado o clausula perosona( carlos ) tiene aridad uno porque solamente tiene como argumento a carlós igual que persona( itxy ) tiene aridad uno , pero el predicado o clausula maridoYMujer(carlos, itxy) tiene aridad dos porque contiene dos argumentos ( términos ), de igual forma estas cláusulas pueden tener estructuras como se observara en la figura6. ILUSTRACION 7: Aridad de predicados con estructura Fuente: [4] 8.2 CONCATENACION La concatenación de una lista es generar una lista a partir de dos listas, por ejemplo, las siguientes listas: Sea A una lista [ a, b, c ] y sea B una lista [ 1, 2, 3 ] la concatenación de la lista A y B será una lista C donde esta lista C es [ a, b, c, 1, 2, 3 ]. Observe la siguiente imagen donde se representa la concatenación de dos listas en prolog. 10 ILUSTRACION 8: concatenación Fuente: [6] 8.3 RESTA La resta de una lista no es más que nada la generación de una lista filtrando elementos de otra lista como por ejemplo filtrar de una lista de persona a los caballeros ILUSTRACION 9: representando la resta de lista en el lenguaje prolog Fuente: [6] 8.4 DUPLICAR Duplicar una lista es simplemente que hacer el copiado de una lista con elemento a una lista vacía donde obtendrás la lista origen y la lista destino donde la lista destino era la lista vacía al principio. 11 9. LECTURA Y ESCRITURA En el lenguaje de programación lógico o sea prolog, puede ser engorroso o incomodo trabajar haciendo consultas en la venta de dialogo, es por ello que prolog trae incorporado predicados de escritura en pantalla algunas versiones anteriores de prolog como (preTurbo) disponían de una impresión “pp” lo que significa que tenían impresión agradable. Aquí mencionare algunos de los predicados de escritura más usados. Write: este predicado es de uso general, este escribe los argumentos que contiene en la pantalla y además que lo escribe en la posición actual donde está el cursor, de igual forma cabe recalcar que el argumento puede ser una constante o variable, es importante saber que la variable que pasa como argumento debe estar instanciada o sea que tiene que tener un valor almacenado dentro, de no ser así lo más probable que prolog te marque error observe la siguiente figura ILUSTRACION 10: sintaxis del predicado write Fuente: [5] nl: es un predicado que se usa para mostrar un salto de línea en pantalla, además que es de aridad nl/0. Writef: muestra en pantalla una salida formateada de cualquier número de argumentos. 12 ILUSTRACION 11: sintaxis del predicado de escritura writf Fuente: [4] Igual prolog nos permite hacer lectura de datos desde el teclado o desde otro dispositivo que brinde información algunos predicados de lecturas son: read: sirve para capturar datos desde el teclado. Cuando el argumento de de read no está instanciada este hace que el termino siguiente se lea y se instancie (guarde) en X, cuando se lee un dato con este predicado siempre tiene que ir un punto es que este necesita que aparezca el punto. [1] La sintaxis de para capturar un dato con read es read( ValorALeer ). [1] Put: este presenta en pantalla su argumento como un carácter. [1] get y el get0: estos predicados hacen que el ordenador haga una pausa hasta que el usuario introduzca algunos caracteres. [1] skip: predicado u objetivo que lee y no descrimina los caracteres del canal de entrada 10. LECTURA Y ESCRITURA EN ARCHIVOS Al igual que otros lenguajes de programación prolog nos permite escribir y leer información en ficheros ya que podemos darnos cuenta que como desarrolladores es de esencial importancia guardar datos que arroje el programa y que luego estos se necesiten en un futuro. De esta forma podemos almacenar información en disco y leer nuevamente desde el archivo. 13 Prolog reconoce un canal de entrada activo donde este lee información entrante y de igual forma la salida se da por un canal de salida activo. Prolog cuenta con un conjunto de predicados predefinidos que trabajan de forma colectiva para lograr la lectura y escritura de un archivo. Para la escritura de un archivo en prolog debemos usar o más bien lo que podemos usar el predicado tell(X) donde X esta instanciada con el nombre del archivo en si este predicado cambia el canal de salida, y que de igual forma este predicado tell crea el archivo con el nombre que le pasamos como argumento o sea X esto lo que permite es que cuando usemos un predicado de escritura ( write, put …) lo que escribimos se muestre en el archivo que creamos con el predicado tell, ya una vez que se escriba en el archivo lo que deseamos, se usa el predicado told para que este cierre el archivo y cambie el canal de salida, y de esta forma podemos escribir un archivo en prolog y es una de las forma más fáciles de entender al principio. ILUSTRACION 12: escritura en archivo Fuente: [1] Para la lectura de un archivo en prolog se usa el predicado o el objetivo see( X ) donde este se usa para cambiar el canal de entrada para que la entrada se dé desde el archivo especificado, luego para leer un la información del archivo podemos usar los objetivos read, get, o get0 y para cambiar el canal de salida al principio se usa el objetivo seen. ILUSTRACION 13:lectura de un archivo 14 Fuente [1] 11. CONCLUSIONES Al finalizar esta monografía sobre la organización y estructura de prolog, se pueden exponer las siguientes conclusiones: La programación en prolog ofrece una solución práctica para la resolución de problemas que demanden una cantidad considera de comparaciones o más bien consideraciones que debe tomar en cuenta. La organización y estructura de prolog nos permite el manejo de lista ya sea para copiar una lista o filtrar datos de esta, de igual forma que podemos generar una lista a partir de dos listas. Tambien debemos tener en cuenta que en ellas podemos una secuencia de datos que podemos usar a favor. Otras de las conclusiones que podemos dar referente a esta monografía es sobre el bracktraking podemos decir que cuando hacemos una consulta en prolog internamente este empieza como una búsqueda de posibles soluciones donde en si tratando de satisfacer la consulta que realizamos Desde un punto de vista amplio, el lenguaje de programación prolog es uno de los lenguajes que tiene gran ventaja en la inteligencia artificial y la creación de sistemas expertos etc. 15 12. REFERENCIAS BIBLIOGRÁFICAS [1] W. C.S.Mellish, PROGRAMACION EN PROLOG, Barcelona: GUSTAVO GILI, S.A, 1984. [2] R. s. d. giorgis, prolog-4, escuela de ingenieria informatica, Universidad catolica de valparaiso. [3] M. Bramer, logic progreming with prolog, New York, 2013. [4] P. R.ROBINSON, Turbo Prologo, 1987. [5] Departamento de Ciencias e Ingeniería de la Computación Computación, «programacion en prlog,» 2009. [6] J. E. L. G., Programación Práctica en, 1998. [7]