Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-Es declarativo: Se tiene que especificar como es el problema a resolver y las soluciones.
-Usa la unificación
Prolog surgió a finales de los años 60 y principio de los 70, el propósito de este no era ser lenguaje de
programación sino procesar un lenguaje natural (francés). Su primera versión estable fue presentada a
final de 1972 por Colmeraurer y Roussel. En 1977 Warren presentó el primer compilador de Prolog y
después desarrollo una máquina abstracta destinada a la ejecución de Prolog
(WAM). Algunos intérpretes son: Amzi! Prolog!, B-Prolog, Ciao Prolog y SWI-Prolog. Este último será con
el cual utilizaremos ya que es un intérprete libre, robusto y fácil de manejar.
Los programas en Prolog son escritos en ficheros de texto con extensión .pl y cargados como podemos
ver a continuación:
Los átomos son términos compuestos por letras mayúsculas, minúsculas, números, guiones bajos (_),
más (+), guion intermedio (-), arroba (@), entre otros símbolos, además de los términos que están entre
comillas simples. Deben comenzar por letra minúscula. Hay algunos átomos que tienen significado
predefinido en Prolog.
Las variables son términos compuestos por letras, números y guiones bajos (_). Deben comenzar con
mayúscula o guion bajo.
Los términos complejos son denominados como estructuras, los átomos, números, y variables permiten
su definición. Es un funtor acompañado por una secuencia de argumentos estos últimos van en
paréntesis separados por comas. Los funtores son átomos.
En los programas de prolog se traducen los conceptos existentes (lenguaje natural) en lenguaje de
primer orden. Estan compuestos por un conjunto de capsulas que pueden ser de tres tipos: Hechos
(declaran cosas que son siempre ciertas), reglas (declaran cosas que son condicionalmente ciertas),
consultas (preguntas realizadas por parte del usuario acerca de que cosas son ciertas).
Satisfacer objetivos: comprender la manera de resolución de las consultas realizadas a través del
interprete permite reducir el esfuerzo empleado en la escritura y entendimiento. En la consulta:
Si los términos son constantes hay que comprobar si son el mismo término. Si lo son, la unificación tiene
éxito. En otro caso, la unificación falla.
Si los términos son compuestos hay que comprobar en primer lugar sus funtores y aridades. Si tienen el
mismo funtor y aridad, hay que comprobar si los argumentos unifican por pares. Si esto sucede, la
unificación tiene éxito. En otro caso, la unificación falla.
La recursión es la manera en la que la especificación de un determinado proceso del mundo real se basa
en sí misma. En Prolog es muy importante para la definición de predicados, hay dos tipos:
-Recursión indirecta: Un predicado pred1 está definido en base al predicado pred2, el cual a su vez está
definido en base al predicado pred3, el cual está definido en base al predicado pred1.
primer argumento.
Objetivo: calcular el máximo común divisor de dos números. Debe tener tres argumentos:
El primero de los números cuyo máximo común divisor se desea
Calcular. El segundo de los números cuyo máximo común divisor se desea. Calcular el máximo común
divisor de los números anteriormente definidos.
Una lista en Prolog es una estructura de datos que nos permite almacenar cualquier tipo d elemento
definido en el lenguaje: constantes, variables y estructuras. Para definir las listas se encierran sus
elementos entre corchetes, se separan por comas, su longitud estará determinada por el número de
elementos, de estos últimos puede contener un número finito de elementos pudiendo ser a su vez listas,
hay una lista que no tiene elementos a esta se le denomina lista vacía. Las listas que contienen
elementos se pueden descomponer en cabeza y cola. La cabeza de la lista es el primer elemento que
contiene, y la cola son todos los elementos restantes. El operador más importante para la manipulación
de las listas en Prolog es “|” está destinado a realizar la descomposición de una lista en su cabeza y su
cola. Aquí hay ejemplos de su uso:
Podemos también consultar un solo elemento de la lista
Pero también se puede hacer de manera más sencilla, para evitar información adicional que no
requerimos.
siguiente regla:
A continuación, ejemplos:
El predicado deleteAll es para eliminar un elemento de una lista. Debe tener a lista en la que queremos
eliminar, el elemento a eliminar, la lista obtenida al haber eliminado el elemento.
Si la lista se encuentra vacía, cualquier elemento que se quiera eliminar da como resultado otra lista
vacía. deleteAll( [ ],_ , [ ] ).
:- Cabeza = Elemento,
Si el elemento a eliminar no es el primero de la lista, la lista resultante debe tener como cabeza ese
mismo elemento dado que no va a eliminarse.
:- dif(Cabeza, Elemento),
deleteAll(Cola,Elemento,Resultado)
El predicado append definir un predicado en Prolog que concatene dos listas de elementos
Debe tener tres argumentos: La primera de las listas a cuyos elementos van a concatenarse los
de la siguiente lista, la segunda de las listas cuyos elementos van a ser concatenados a
los de la anterior lista, la lista obtenida al haber concatenado los elementos de las dos
listas anteriores.
A continuación, ejemplos:
Librería lists.pl proporciona un amplio conjunto de predicados destinados
Hoy en día facilita las tareas relativas a la manipulación de operaciones aritméticas mediante el empleo
de notación similar a la familiar para muchos usuarios. Basa la gestión de las operaciones aritméticas
fundamentalmente a través del predicado predefinido en el lenguaje is, es un predicado infijo, así que
debe ser empleado entre dos argumentos, normalmente el situado a la izquierda es una variable no
enlazada mientras que el argumento situado a la derecha es una expresión aritmética o un número.
A continuación, podemos ver los principales operadores aritméticos
disponibles en Prolog:
X + Y: la suma de X e Y
X - Y: la diferencia de X e Y
X * Y: el producto de X e Y
X / Y: el cociente de X e Y
-X: el negativo de X
sin(X): el seno de X
cos(X): el coseno de X
El predicado factorial permite definir un predicado en Prolog que permita calcular el valor
Debe contener: el entero cuya factorial desea calcularse y el valor factorial del número indicado en el
primer argumento.
Esto significa que cuando el primer argumento establecido en el predicado es el entero 0, el segundo
argumento debe tomar el valor 1. factorial (0, 1).
El valor factorial de un entero positivo N es N multiplicado por la factorial del entero N-1. En Prolog
debemos plantear una regla que en primer lugar compruebe que el primer argumento sea un entero
positivo, luego calculamos el valor N-1, calculamos la factorial del entero N-1 (denotado como F1) y
finalmente calculamos el valor factorial de N. factorial(N, F) :- N > 0, N1 is N-1, factorial(N1, F1), F is N *
F1.
File consult, abrir el que quieres, punto para error y consulta