You are on page 1of 14

PROLOG

DESARROLLOS INTELIGENTES
RAMIREZ PEREZ NORMA VERONICA
MANUAL BASICO DE PROLOG
RAMIREZ PEREZ NORMA VERONICA
Bajar el Programa de la siguiente pagina: http://www.swi-prolog.org/, como todos
los programas, se tiene que definir en que plataforma lo vamos a instalar, para lo
cual en la pgina existen diferentes versiones, tanto para Windows como para Mac.
Para entender sofware, deberemos saber de antemano algunos conceptos de
programacin lgica, lgica de predicados, etc., por lo que les sugiero que se
pongan a leer un poco sobre el tema.

Al instalar lo primero que nos va aparecer, ser la siguiente interfaz:

Podemos observar que nos describe las libreras con las que trabaja e inclusive las
clausulas, la versin etc., he inclusive nos invita a que visitemos su pgina para
mayor informacin, como prolog es un lenguaje declarativo, lo que espera es que le
hagamos preguntas, por lo que al iniciar nos muestra, un signo de interrogacin.
1 ?Tras este smbolo, el programador puede teclear una pregunta (la cual siempre
tiene que terminar con un punto) y dar clic en el retorno del carro, por lo que el
usuario solicita al lenguaje Prolog responda a la presenta recin formulada. Una
vez contestada la pregunta, Prolog mostrar
en pantalla la respuesta
correspondiente:
Ejemplo:
?- 5 is 2+3.
Yes

Como podemos observar como la suma de 2+3 es correcta, nos arroja un Yes en
caso contrario, nos dar un No. Recuerden que Prolog siempre esperar un punto
al final de lo contrario les mostrar lo siguiente:
?- 5 is 3+2
|
El smbolo | indica que est esperando a que se termine de formular la presenta,
por lo que bastar escribir el punto para que nos d la respuesta.
?- 5 is 3+2
|.
Yes
Se pueden detectar algunos posibles errores que se comentan al realizar una
pregunta, las preguntas son realmente trminos Prolog y deben ajustarse a una
sintaxis formal concreta. Por lo que si la pregunta no es un trmino prolog
correcto, habremos cometido un error sintctico, pero prolog es capaz de
detectarlo:
Por ahora, realizaremos un script , para poder trabajar con el desde un editor que
tiene prologa si es que empezaremos a definirlo de la siguiente manera:
Damos clic en File/New como se muestra a continuacin:

Y nos aparecer un cuadro de dialogo

Donde introduciremos el nombre del archivo que quiero crear, como pueden
observar solo nos muestra el tipo de archivo que produce prolog, el cual lo define
como extensin *.pl.
Le daremos el nombre a nuestro archivo arbolgenealogico.pl, y le daremos clic en
aceptar, para luego mandar nuestro script que trabajaremos en Prolog.

Empezaremos con los comentarios que se definen de la siguiente manera:


Comentarios:
%Hola , esto es un comentario,
% tambin esto
Variables:
Las variables de prolog no son variables en el sentido habitual, por eso se llaman
variables lgicas, se escriben como una secuencia de caracteres alfabticos, que
siempre comienzan con mayscula o subrayado:
Ejemplo:
Variables
Inteligencia
_inteligencia
No variables
inteligencia
$inteligencia
i_
En prolog los nombres de las variables comienzan por mayscula(o subrayado)
para evitar la necesidad de declarar previamente y de manera explicita las
variables, tal y como ocurre en otros lenguajes.
Tenemos por otra parte las variables annimas con las que se puede trabajar con
prolog, las cuales las podemos realizar con el smbolo de subrayado, pero tenemos
que tomar en cuenta que aunque todas las variables se escriben igual, son todas
distintas, es decir mientras que dos apariciones de la secuencia de caracteres hola
se refieren a la misma variable, dos apariciones de la secuencia _ se refieren a
variables distintas, ya se entender ms adelante con ejercicios.
Trminos
Prolog trabaja con trminos, que en si, son con los nicos que lo hace, es decir,
todos los datos son trminos: el cdigo, el programa, etc.
Un termino se compone de un functor seguido de 0 a N argumentos entre
parntesis y separados por comas. Los nmeros enteros o decimales sin
restricciones de tamao tambin son trminos..
Un functor (tambin denominado tomo) puede ser:
*Una sucesin de caracteres alfanumricos comenzando con una letra minscula.
*Un smbolo de puntuacin o secuencia de estos. Las secuencias permitidas varan
de un entorno de desarrollo a otro.
Una sucesin cualquiera de caracteres encerrada entre comillas simples.

Veamos algunos ejemplos de functores:


Functor
F384pl12
esto es un nico functor
_functor
$
+

No son functores validos


_functor
Functor
Los argumentos de un trmino pueden ser:
Otro termino
Una variable lgica
La mejor forma de aprender a escribir trminos es observando algunos ejemplos:
12345677.454545454545
t(1)
mi functor
Operadores
En muchas ocasiones algunos functores estn declarados como operadores, de
manera predefinida , o bien por el programador. Los operadores simplemente
sirven para escribir los trminos unarios y binarios de una manera mas cmoda.
Ejemplo:
Un functor definido como operador infijo es la suma(+). As la expresin a + b es
perfectamente vlida, aunque en realidad no es mas que el termino +(a,b).
Los operadores binarios infijos nos permiten escribir el functor entre los dos
argumentos y eliminar los parntesis.

Hechos en prolog
Un hecho en prolog es una relacin entre objetos
Ejemplo:
La capital de Jalisco es Guadalajara

En prolog se escribir de la siguiente forma


Capital(jalisco,guadalajara).
En general , la sintaxis es
relacin(objeto, objeto,.).
La relacin se conoce como el predicado y los
objetos como los argumentos
los nombre de todos los predicados y
argumentos deben de comenzar con una
letra minscula.
Primero, se escribe el predicado. Los
argumentos se escriben separndolos
mediante comas y encerrados entre
parntesis
Al final del hecho debe ir un punto.
Ejercicio 1. Representa los siguiente
hechos en Prolog
1. A Martin le gusta el dinero
gusta(martin,dinero)
2. Cecilia es alta
es(cecilia,alta)

3. Norma viaja a Madrid en tren.


viaja_en_tren(norma,madrid).
4. Veronica vive en Celaya
vive(veronica,celaya).
Ms ejemplos de hechos.
Cuadrado(1,1) Cuadrado(2,4) cuadrado(3,9)
Cuadrado(1,1).
Cuadrado(2,4).
Cuadrado(3,9).
Ejercicio 2:
Representa los siguientes hechos en Prolog.
1. juan come chocolate, queso, fruta
come(juan,chocolate).
come(juan, queso).
come(juan,fruta).
2. Espaa, Francia y Alemania son pases
paises(espaa).
paises(francia).
paises(alemania).

La mayora de los programas en Prolog estn


organizados en cuatro secciones principales
* Dominios
* predicados
* objetivos
* clausulas
/*Programa 1.1. Hechos*/
predicados
le_gusta (symbol,symbol)
Clasulas
le gusta(jose, pescado)
le_gusta(martin,libros)
le_gusta(jose,libros)

Reglas:
Una regla consta de dos partes, una cabeza y un
cuerpo. La cabeza y el cuerpo esta unidos
mediante el smbolo :Cabeza:-cuerpo.
El cuerpo puede estar formado por varios hechos

cabeza:- hecho1,hecho2, ..,hechon.


La separacin :- se lee si (la cabeza es verdad si
el cuerpo es verdad.)
Ejemplo: es_divisible_por_dos(X):-par(X).
Se lee X es divisible por dos si X es par
Esta clausula en Prolog es equivalente a la
formula de primer orden(X) par(X) Es
divisible_por_dos(X).
Por tanto , si podemos probar que X es par entonces
hemos probado que X es divisible por dos.
Como nota adicional: en la cabeza de una regla no
puede hacer mas de un hecho.
Ejemplo: feliz(martin) rico (martin)
,poderoso(martin)

No se puede expresar directamente en Prolog


como:
Feliz(martin), poderoso(juan):-rico(juan).

Ejercicio 3: Representa las siguientes reglas


en prolog.

1. a juan le gustan todas las cosas que tiene


pedro.
gustan(juan):-tiene(pedro,cosas)

2. Si alguien necesita dinero, juan se lo dejara


dejara(juan):-necesita(alguien,dinero)
3. Todo el mundo habla ingls.
es(persona):-habla(ingls).

Variables
Las variables se utilizan para escribir hechos y
reglas generales.
Los nombres de las variables deben comenzar
con letra mayscula o con carcter(_).
Mi_primer_variable
Persona

_a123
_
Para prolog, dos nombres idnticos para una
variable slo se refieren al mismo objeto si estn
en la misma clausula. Por tanto, en el siguiente
ejemplo:
feliz(X):-tiene_salud(X).
le_gusta(Juan):-le_gusta(_juan).

La variable X de la primera clausula no se refiere


al mismo objeto que en la segunda.
Variables.
En otros lenguajes de programacin una variable
indica un lugar de memoria que puede tener
diferentes valores en distintos momentos en la
ejecucin del programa.
En prolog a una variable no se le puede reasignar
un valor.
Ejemplo:
Pascal: X=1

X=2

La variable annima o blanca(_) se utiliza como


las dems variables pero nunca toma ningn
valor.
Conjuncin
Una persona es feliz si es rica y famosa y tiene
xito.
feliz(persona):rica(persona),
famosa(persona),
exito(persona).
Disyuncin
Una persona es feliz si es rica o famosa.
feliz(Persona):- rica(Persona).
feliz(Persona):- famosa(Persona).

Ejercicio 4. Representa las siguientes reglas


en Prolog.
1. Un alumno acredita si estudia o hace
prcticas
acredita(alumno):-estudia(alumno)
acredita(alumno):-hace_praticas(alumno).

2. La personas que juegan al futbol o al


baloncesto son deportistas
deportista(persona):-juega(baloncesto).
deportista(persona):-juega(futbol).

%realizar el siguiente rbol genealgico


% Se trata de un rbol genealgico muy simple
%
%
% Primero se definen los parentescos bsicos
% de la familia.
% padre(A,B) significa que B es el padre de A.
padre(juan,alberto).
padre(luis,alberto).
padre(alberto,leoncio).
padre(geronimo,leoncio).
padre(luisa,geronimo).
% Ahora defino las condiciones para que
% dos individuos sean hermanos
% hermano(A,B) significa que A es hermano de
B...
hermano(A,B) :padre(A,P),

padre(B,P),
A \== B. % A no es igual a B
% Ahora se define el parentesco abuelo-nieto.
% nieto(A,B) significa que A es nieto de B...
nieto(A,B) :padre(A,P),
padre(P,B).
% para cargar el programa lo que se debe de
hacer es ir a file/save
% buffer, y despus ir a compile/compile buffer
% ahora escribir lo siguiente para probar nuestro
programa
% ? hermano(A,B), nos arrojar todas las
soluciones que encuentre prolog
% ahora vamos a probar lo que no tienen otros
lenguajes la
% reversibilidad
%

You might also like