You are on page 1of 25

Programacin

Descriptiva
CLASE 01

Ing. Francisco Fujiki Escobar

Introduccin

Programacin Lgica
Es un tipo de paradigma de programacin dentro de la programacin
declarativa.

Prolog (PROgramacin LOGica)


Es un lenguaje de programacin declarativo.
La programacin declarativa es un paradigma de programacin que est
basado en el desarrollo de programas especificando o "declarando" un
conjunto de condiciones, proposiciones, afirmaciones, restricciones,
ecuaciones o transformaciones que describen el problema y detallan su
solucin. La solucin es obtenida mediante mecanismos internos de control,
sin especificar exactamente cmo encontrarla (tan slo se le indica a la
computadora qu es lo que se desea obtener o qu es lo que se est
buscando).

Diferencia entre imperativo y


declarativo
En la programacin imperativa se describe paso a paso un conjunto de
instrucciones que deben ejecutarse para variar el estado del programa y
hallar la solucin, es decir, un algoritmo en el que se describen los pasos
necesarios para solucionar el problema.
En la programacin declarativa las sentencias que se utilizan lo que hacen es
describir el problema que se quiere solucionar, pero no las instrucciones
necesarias para solucionarlo. Esto ltimo se realizar mediante mecanismos
internos de inferencia de informacin a partir de la descripcin realizada.

Prolog
Es un lenguaje de programacin muy til para resolver problemas que
implican objetos y relaciones entre objetos. Est basado en los siguientes
mecanismos bsicos:
Unificacin
Estructuras de datos basadas en rboles
Backtrackin automtico

La sintaxis del lenguaje consiste en lo siguiente:


Declarar hechos sobre objetos y sus relaciones
Hacer preguntas sobre objetos y sus relaciones
Definir reglas sobre objetos y sus relaciones

En Prolog

Sintaxis
En Prolog, los programas son construidos basados en terminos,
un termino puede ser una constante, una variable o una
estructura.
Cada termino se escribe con una secuencia de caracteres.
Letras maysculas
Podemos dividir los caracteres en 4 categoras:
Letras minsculas

A B C D E F S T U V W X Y Z
Dgitos
a b c d e f ...... s t u v w x y z
Signos
0123456789
+-*/\~^ <>:.?@#$&

Sintaxis
A continuacin se mencionan:
Las clusulas deben terminar con un punto (.).
Un identificador es cualquier cadena resultante de la combinacin de
caracteres alfanumricos (a-z,A-Z,0-9) y el subrayado (_). La creacin de
identificadores rige las sgtes convenciones:
Para las variables deben comenzar por una letra mayscula o subrayado
Para constantes, funciones y relacin por una letra minscula.

La clasificacin de los objetos en Prolog es el siguiente:


Objetos

Objetos simples

Constantes

Nmeros

Variables

Constantes no
numricas

Objetos Estructurados

Constantes
Los nmeros tambin son de tipo constante. Ejemplos:
-17

0
2
99.9
512
8192 14765 67344 6.02e2.67e
23
La notacin
e es usado para expresar una potencia de 10. Por ejemplo el
2
numero -2.67e2
es -2.67*102 o solo -267; 6.02e-23 es 6.02*10-23.

Variable

Ejemplos
Ejemplo de nombres de variable:
_x, Actividad, X, Y, Numero, Nombre_predicado
[_x], Actividad*, x, &Y, Nmero, Nombre predicado
La razn de la incorrecin de c/u es la siguiente:
En[_x] y Actividad* los caracteres [, ] y * no pueden formar parte del
identificador.
En x el identificador comienza con una letra minscula.
&Y el carcter / no puede ser parte del identificador, sin mencionar que se
debe comenzar con una letra mayscula o el subrayado.
Nmero no es correcto porque no puede contenes una letra con tilde.
Nombre predicado no es correcto porque no puede contener espacios.

Ejemplos
Ejemplo de nombres de nombres constantes (o funcin o relacin):
elegir_menu, nil, un_padre, esPrimo, es_variable, nombre_predicado
Elegir/men, [nil], 1_padre, es>Primo, var, name
La razn de la incorrecin de c/u es la siguiente:
En elegir/menu, [nil] y es>Primo los caracteres /, [, ] y > no pueden
ser parte de un identificador.
El 1_padre no puede comenzar con un dgito
var y name son palabras reservadas que corresponden a nombres de
predicados predefinidos.

Operaciones Aritmticas
Operacin

Smbolo

Suma

Resta

Multiplicacin

Divisin entera

div

Mdulo

mod

Divisin

Operaciones de comparacin
Operacin

Smbolo

Mayor que

>

Menor que

<

Mayo o igual que

>=

Menor o igual que

=<

Igual que

=:=

Distinto que

=\=

Los hechos en Prolog


Se describir un breve ejemplo, para el entendimiento del concepto:
Las relaciones familiares
Para decir que Laura es uno de los progenitores de Daniel, podemos declarar el siguiente
hecho en Prolog:
progenitor(laura,daniel).
progenitor es el nombre de la relacin o nombre de predicado y laura y damian son
los argumentos. Los hechos siempre acaban con punto (.).
Lo que podemos interpretar es que Laura (1er argumento de la relacin), es la madre de
Daniel (2do argumento de la relacin). Sin embargo este orden es arbitrario y cada
programacdor puede darle su propio significado.
*Los nombres de las relaciones y los argumentos que se refieren a objetos o persona
concretas se escribirn con minscula.

Ejemplo de Hechos
le_gusta_a(juan,maria).
valioso(oro).
tiene(juan,libro).
da(juan,libro,maria).
Los nombres tambin son arbitrarios y el programador decidir la interpretacin
que haga de ellos. La relacin le_gusta_a(juan,maria) es equivalente a la
relacin a(b,c), aunque para que la interpretacin sea ms sencilla, se
recomienda que los nombres se elijan de forma que ayuden a su interpretacin.
Los hechos no tienen que reflejar el mundo real necesariamente, pero ser
nica y exclusivamente lo que PROLOG tomar como verdadero. Un conjunto de
hechos (tambin llamados clusulas), junto con un conjunto de reglas, forman lo
que se llama una base de datos PROLOG.

Las preguntas en Prolog


Sobre un conjunto de hechos se pueden realizar una serie de preguntas. Por
ejemplo:
?- le_gusta_a(juan,maria).
PROLOG busca automticamente en la base de datos si existe un hecho que
se puede unificar (es decir, tiene el mismo nombre de predicado, el mismo
nmero de argumentos -o aridad- y cada uno de los argumentos tiene el
mismo nombre, uno a uno) con el hecho que aparece en la pregunta.
PROLOG contestar SI si encuentra ese hecho y NO si no lo encuentra. La
contestacin NO no implica que el hecho sea falso (aunque s lo sea para
nuestra base de datos), sino que no se puede probar (en general) que sea
verdadero con el conocimiento almacenado en la base de datos.

Las preguntas en Prolog


Para realizar preguntas ms interesantes, como por ejemplo, qu le gusta a
Mara o cules son los padres de Damin, se usarn las variables. En PROLOG
las variables empiezan por mayscula. Por ejemplo:
?-le_gusta_a(maria,X).
?-progenitor(Y,damian).

Las preguntas en Prolog


Para obtener la o las respuestas, PROLOG recorre la base de datos hasta encontrar
el primer hecho que coincide con el nombre de la relacin y su aridad y con los
argumentos que no son variables. Marca esa posicin para poder recordar dnde
se qued en el recorrido por la base de datos. La o las variables se instancian al
valor que le corresponde segn el lugar que ocupan en la relacin, y ese valor es
la respuesta que proporciona PROLOG. Si pulsamos RETURN no obtendremos ms
que la primera respuesta. Si se quieren obtener todas las respuestas (para el caso
de que exista ms de una) se teclea ;. Cuando pulsamos ;, PROLOG sigue
automticamente la bsqueda desde la marca de posicin en la que se haba
quedado en la base de datos. Se dice entonces que PROLOG intenta resatisfacer la
pregunta. Se desinstancian las variables que se haban instanciado, y sigue
buscando otro hecho que coincida sintcticamente con la pregunta. A este
mecanismo se le llama backtracking, y PROLOG lo hace automticamente.

Las preguntas en Prolog


Para resolver preguntas ms complejas, como por ejemplo, se gustan Juan y
Mara? o tienen Ana y Damin un progenitor comn, es decir, son
hermanos? O quin es el nieto(s) de Toms?, se utilizan conjunciones de
objetivos, es decir, preguntas separadas por comas, que en PROLOG
corresponden a la Y lgica.
?-le_gusta_a(juan,maria), le_gusta_a(maria,juan).
?-progenitor(X,ana), progenitor(X,damian).
?-progenitor(tomas,X), progenitor(X,Y).

Esquema condicional en Prolog


En PROLOG la Y lgica corresponde a la , y la O lgica a la definicin de
varias clusulas para el mismo predicado. Equivalente a la definicin de
varias clusulas para el mismo predicado es el uso del predicado predefinido
;, tal y como vemos en los siguientes ejemplos:
p
p
p
p

::::-

a, b.
c, d.
e, f.
g.

p :(
a, b
;
c, d
;
e, f
;
g
).

You might also like