PDF de programación - Introducción al Prolog

Imágen de pdf Introducción al Prolog

Introducción al Prologgráfica de visualizaciones

Publicado el 5 de Mayo del 2021
333 visualizaciones desde el 5 de Mayo del 2021
210,8 KB
18 paginas
Creado hace 22a (09/04/2002)
INTRODUCCIÓN AL

PROLOG

Ingeniería Informática

Departamento de

Informática

Introducción al Prolog

1

PRÓLOGO
Esta introducción al Prolog está pensada para las prácticas de la asignatura de Lógica y
Programación de la Universitat de València, no es por tanto autocontenida ni completa.
Para comprender correctamente lo aquí explicado es conveniente leer los apuntes de
teoría de la asignatura.

Para cualquier comentario o error en el texto ponerse en contacto con el autor: Fernando
Barber Miralles ([email protected]).

1. INTRODUCCIÓN
El Prolog es un lenguaje de programación lógica (de ahí su nombre). Esto significa que
está basado en la lógica de predicados, en concreto en un subconjunto de esta lógica
denominado cláusulas de Horn.

En Prolog, un programa es un conjunto de hechos y reglas que representan el problema
que se pretende resolver. Ante una determinada pregunta sobre el problema, el Prolog
utilizará estos hechos y reglas para intentar demostrar la veracidad o falsedad de la
pregunta que se le ha planteado.

La demostración de la pregunta se basa en dos principios:

• La unificación: Es el algoritmo que se encarga de resolver las igualdades lógicas.

• El principio de resolución: Es el algoritmo que, a partir de la negación de la
pregunta y los hechos y reglas del programa, intenta llegar a un absurdo para
demostrar que la pregunta es cierta.

2. PROGRAMAS, PREDICADOS
Un programa Prolog está formado por predicados. Cada predicado está definido
unívocamente por su nombre y su aridad. La aridad es el número de argumentos (o
parámetros) de un predicado.

Ej.

humano(pepe).
humano(juan).

Para referenciar este predicado se utiliza únicamente su nombre y aridad: humano/1.

Cada predicado en Prolog puede estar definido por una o más cláusulas. En nuestro
ejemplo, humano/1 está definido por dos cláusulas.

Las cláusulas a su vez pueden ser de dos tipos: hechos y reglas.

Los hechos son afirmaciones que consideramos ciertas en nuestro programa.

Las reglas son implicaciones lógicas, que pueden tener varios antecedentes pero un
único consecuente. Este tipo de reglas se denominan cláusulas de Horn.

Introducción al Prolog

2

Ej.

humano(X) → mortal(X).
que utilizando la sintaxis de Prolog se escribe:
mortal(X):-

humano(X).

Los hechos se pueden considerar casos particulares de reglas en donde no hay ningún
antecedente.

3. TÉRMINOS DE PROLOG
Los argumentos en una cláusula pueden ser cualquier término de Prolog. Los términos
de Prolog son los siguientes:

Átomos: Los átomos hacen las funciones de identificadores en Prolog. Un átomo puede
ser cualquier combinación de caracteres alfanuméricos, pero si no empieza por una letra
minúscula o si contiene caracteres que no sean letras, números o el carácter subrayado
‘_’, debe encerrarse entre comillas simples.
Ej.

Válidos
unatomo
otro_atomo
'Atomo'
'2+3'
'un atomo'

No Válidos
un atomo
_otro_atomo
Atomo
2+3

Enteros: Números enteros. El rango es dependiente de la implementación.

Reales: Números reales. El rango también es dependiente de la implementación.
Ej:

12.3

2.5e-4

Estructuras (funciones): Se utilizan para agrupar un número constante de términos.

Listas: Se utilizan para agrupar un número variable de términos.

Variables: Una variable puede ser instanciada a cualquier otro término de Prolog,
incluida otra variable. No son equivalentes a las variables en los lenguajes procedurales,
sino a las variables lógicas o matemáticas. El nombre de una variable ha de comenzar
por una mayúscula o subrayado y puede contener cualquier combinación de letras,
números y el carácter subrayado.
Ej:

Suma

X2

_32

_

El carácter subrayado es un tipo de variable especial que se denomina variable
anónima. Ésta se utiliza para escribir variables sin necesidad de darles un nombre. Cada
aparición del carácter subrayado representa una variable distinta.

Introducción al Prolog

3

4. UNIFICACIÓN
La unificación, como ya se ha comentado, es el algoritmo que se encarga de resolver las
igualdades lógicas.

Aunque la unificación en Prolog sustituye a la asignación de los lenguajes procedurales,
no hay que confundirla con esta, son operaciones totalmente distintas. La operación de
unificación se representa mediante el operador =.

Ejercicios:

X = pepe.
3 = X.
X = Y.
X = 3, X = 5.
f(3, 2) = f(X, 2).
f(X, p(a) ) = f(p(Y), Y).
X = 3 + 2.
5 = 3 + 2.
X + 3 = 2 + Y.
f(X, f(X) ) = f(Y, Y).

5. ARITMÉTICA
Como hemos visto, en la unificación no se evalúan expresiones. Para ello existe un
operador especial ‘is’ que antes de realizar la unificación evalúa la parte derecha como
si se tratase de una expresión aritmética.

X is 3 + 2

es equivalente a

X = evaluar(3 + 2)

Para que esta evaluación se pueda llevar a cabo es necesario que la parte derecha no
contenga ninguna variable sin instanciar, en caso contrario el sistema dará error. En el
apéndice 1 hay una tabla con las operaciones y funciones más comunes en Prolog.

Ej.:

X is 3 + 2.
5 is 3 + 2
X is 3 + Y
X is ln(exp(2) )

Yes

Resultado
X = 5
Yes
Error. No se puede evaluar.
X = 2.0

Yes

5.1 Comparación aritmética
Existen varios operadores para comparar expresiones aritméticas. Estos operadores
evalúan sus dos operandos antes de realizar la comparación. En el apéndice 1 se pueden
ver los distintos operadores existentes.

5 =:= 2 + 3.

es equivalente a

evaluar(5) =:= evaluar(2 + 3)

6. COMPARACIÓN DE TÉRMINOS
Para comparar términos existen también varios operadores que podemos ver en el
apéndice 1. De estos operadores, los más importantes son el igual y el distinto. Para
éstos hay que tener en cuenta que dos términos son iguales solamente si son
exactamente el mismo término.

Introducción al Prolog

4

Ej.

5 == 5
5 == ‘5’
5 == 2 + 3
5 == X

Yes
No
No
No

Estamos comparando un entero con un átomo.
Estamos comparando un entero con una estructura.
Estamos comparando un entero con una variable.

7. RESOLUCIÓN DE PROGRAMAS
En Prolog, todo lo que se introduce en el “prompt” del sistema Prolog se consideran
preguntas. Para escribir un programa es necesario escribirlo en un fichero de texto y
posteriormente cargarlo o compilarlo en Prolog. Para compilar un programa hay que
escribir el nombre del fichero encerrado entre corchetes. Si el nombre tiene la extensión
por defecto para el Prolog (en Eclipse es .pl) no hace falta incluirla. El nombre ha de ser
un átomo, por tanto si contiene algún carácter especial deberá ir encerrado entre
comillas simples.
Ej.

Para cargar el fichero prueba.pl que está en el directorio /prolog
[prueba]
[‘/prolog/prueba.pl’]

Si estamos en el mismo directorio.
Si estamos en otro directorio.

ó

[‘prueba.pl’]

Cuando se compila un fichero, todos los predicados que tiene (tanto hechos como
reglas) pasan a ser axiomas del sistema, es decir, se consideran ciertos. A partir de ese
momento se podrán hacer preguntas sobre esos predicados.

Ej.

humano(pepe).
humano(juan).
mortal(X):-

humano(X).

Después de cargar este fichero podremos hacer preguntas como las siguientes:

[eclipse 1]: humano(pepe).
[eclipse 2]: mortal(pepe).
[eclipse 3]: mortal(javi).
[eclipse 4]: mortal(X).

X = pepe
X = juan

Yes
Yes
No

more? (;)

Si encuentra la pregunta como un hecho, la respuesta es directamente que sí (pregunta 1
del ejemplo anterior). Si encuentra la pregunta como la cabeza (o consecuencia) de una
regla, toma cada uno de los predicados del cuerpo de la regla como nuevas preguntas y
sólo si todas son ciertas, la respuesta será sí (pregunta 2). Si no encuentra ningún hecho
o regla que haga cierta la pregunta, la respuesta será no (pregunta 3).

Es importante tener en cuenta que para comprobar si la pregunta coincide con un hecho
o con la cabeza de una regla se aplica unificación. Esto significa que si en la pregunta
hay alguna variable, ésta unificará con los términos del hecho o regla, es decir, será
igual a los valores que hacen cierta la pregunta. Esto se utiliza para extraer resultados
(pregunta 4). Si existe más de un resultado, habrá que pulsar “;” para verlos.

Introducción al Prolog

5

Ejercicio:
Sea el siguiente programa Prolog:
padre(juan, pepe).
padre(pepe, javi).
padre(pepe, jose).
padre(juan, david).

Completarlo con varias reglas que definan las relaciones hijo/2, abuelo/2, hermano/2,
primo/2, etc. Por ejemplo, para hijo/2 será:

hijo(X, Y):-

padre(Y, X).

8. VISIÓN PROCEDURAL DE LOS PROGRAMAS
Un programa en Prolog puede ser visto desde dos puntos de vista distintos:
• Visión declarativa: Consiste en ver el programa como un problema lógico, es decir,
como un conjunto de hechos y reglas a partir de los cuales se deduce el objetivo
buscado, sin importar cómo se deduce.

• Visión procedural: Consiste en ver el programa como un conjunto de instrucciones
de un lenguaje, que se van ejecutando en cierto orden. Aquí es fundamental conocer
el orden en que ejecuta las instrucciones el Prolog y por tanto, el proceso por el cual
se llega al objetivo.

Hasta ahora hemos visto los programas con una visión declarativa, sin embargo esto no
siempre es posible, debido a que existen ciertas instrucciones que no pertenecen a la
lógica, sino que están dentro de las instrucciones típicas de un lenguaje de
programación, como por ejemplo la entrada y salida de datos. Por ello, es necesario
también conocer el orden en que se ejecutan las instrucciones.

A grandes rasgos, el orden de ejecución de las instrucciones es:
1. Para la elección de una cláusula a partir de las cláusulas que componen un predicado,

el orden de elección es de arriba a abajo.

2. Dentro de una regla, para comprobar si todos los subobjetivos se cumplen, se sigue

un orden de izquierda a derecha.

Cuando un objetivo tiene más de una solución, se devuelve la prim
  • Links de descarga
http://lwp-l.com/pdf19163

Comentarios de: Introducción al Prolog (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad