Subido por crono6737

introducion al lenguaje prolog

Anuncio
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]
Descargar