0% encontró este documento útil (0 votos)
255 vistas

Prolog

Este documento presenta una introducción al lenguaje de programación lógica Prolog en 3 oraciones. Explica que Prolog es un lenguaje declarativo basado en reglas y hechos de lógica cuyo conocimiento se representa mediante consultas. A continuación, muestra ejemplos básicos de hechos, reglas y consultas en Prolog, así como la sintaxis y operadores utilizados en el lenguaje. Finalmente, presenta una introducción al uso de listas, recursividad, aritmética y entrada/salida

Cargado por

maestria20090
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
255 vistas

Prolog

Este documento presenta una introducción al lenguaje de programación lógica Prolog en 3 oraciones. Explica que Prolog es un lenguaje declarativo basado en reglas y hechos de lógica cuyo conocimiento se representa mediante consultas. A continuación, muestra ejemplos básicos de hechos, reglas y consultas en Prolog, así como la sintaxis y operadores utilizados en el lenguaje. Finalmente, presenta una introducción al uso de listas, recursividad, aritmética y entrada/salida

Cargado por

maestria20090
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 40

Aprenda

en N Diapositivas
Programacin Lgica

PROgramming in LOGic
Prolog es un lenguaje declarativo basado en Reglas y Hechos de lgica, cuya informacin es
retribuido en forma de consultas. Originado en Europa a principios de los 70s por Alain
Colmerauer . Para realizar los programas, se debe pensar declarativamente.

REGLAS
PROLOG

CONSULTAS

HECHOS

PROgramming in LOGic
HECHOS
marco es maestro
geniz es un programador

Notacin En Prolog
maestro (marco).
programador(geniz).

piedra (robert).
predicado

sujeto

Fin de
afirmacion

Para definir un hecho en Prolog, deber tomar en cuenta que nuestra oracin
(hecho) debe llevar el formato predicado(sujeto).

PROgramming in LOGic
SINTAXIS
Las variables deben escribirse con Maysculas
Las constantes se escriben con Minsculas
Las afirmaciones se terminan con . (punto)
No se pueden dejar espacios entre los nombres de las constantes, para ello
utilice el guion bajo (_)
Los comentarios empiezan con %

Operadores
Conjuncin , (coma)
Disyuncin ;
Regla o Condicin :Fin de la condicin .

PROgramming in LOGic
Ejemplo en SWI-Prolog Editor
Ahora basndonos en lo ya aprendido ejecutaremos nuestro primer ejemplo en
el editor SWI-Prolog. Para ello teclee lo siguiente:
programador(geniz).
maestro(marco).
piedra(robert).
Ahora vaya al menu Iniciar y
Seleccione Consultar todo
Ahora en el panel de Prolog
Teclee las consultas, ejemplo:
maestro(marco).

marco es maestro?

Interprete Prolog y rea de consulta

PROgramming in LOGic
Ejemplo en SWI-Prolog Editor utilizando la conjuncin
Ahora utilizaremos variables y la conjuncin para realizar consultas. Para ello
teclee lo siguiente:
sistema_operativo(linux).
sistema_operativo(windows).
sistema_operativo(solaris).
sistema_operativo(mac).
microsoft(visual_studio,expression_studio).
sun(netbeans, sun_studio).
borland(jbuilder,delphi).
canonical(ubuntu,xubuntu).

PROgramming in LOGic
REGLAS
Una regla es una sentencia condicional, por ejemplo:
Base de conocimiento
Regla 1: Si esta contento entonces escucha musica
Regla 2: Si tiene radio entonces escucha musica
Regla 3: Si escucha musica y tiene una guitarra entonces toca la guitarra
Hecho 1: Tiene una guitarra
Hecho 2: Esta contento
Consulta
> Esta tocando la guitarra ?
escucha_musica :- esta_contento. % Regla 1
escucha_musica :- tiene_radio. % Regla 2
toca_la_guitarra :- escucha_musica, tiene_guitarra. % Regla 3
tiene_guitarra. % Hecho 1
esta_contento. % Hecho 2
7

INPUT & OUTPUT


WRITE
La orden WRITE imprime en pantalla la cadena de caracteres en cdigo ASCI por
ejemplo:
?- write (Hola Mundo);

La manera de hacer que la cadena aparezca de manera normal, es imprimindola


con una constante, por ejemplo:
?- write(hola_mundo).

NOTA: Recuerde que las constantes se definen con minsculas, adems que solo
deber utilizar la orden write directamente en el interprete.
8

INPUT & OUTPUT


write_canonical
La orden write_canonical imprime en pantalla un flujo de salida utilizando la
notacin de un prefijo y los parntesis, ejemplo:

writeq, print y display


Sirven de la misma manera que write

tab(N): escribe N espacios en blanco


nl: escribe un salto de lnea
9

INPUT & OUTPUT


READ
La orden read sirve para almacenar el valor a una variable, ejemplo:
?- read(variable);

NOTA: Recuerde que las variables de definen en letras maysculas y tambin no


escriba su nombre con la inicial maysculas ya que Prolog lo tomara como otra
constante .
10

INPUT & OUTPUT


READ
Otra forma sencilla de asignar un valor a una variable, colocando directamente el
comando, seguido de la variable. Ejemplo:

Note que para definir a una variable no es necesario que todas las letras que lo
componene sean mayusculas, solo basta con la inicial.

11

ARITMETICA
PLUS
Plus sirve para sumar los argumentos recibidos, ejemplo:

BETWEEN
Encuentra un numero en un rango, ejemplo:

12

ARITMETICA
SUCC
Devuelve verdadero si el 2 argumento es = 1 + 1 y si el 1 >= 0, ejemplo:

IS
Es un predicado que define una expresin, ejemplo:

13

ARITMETICA
OPERADORES
Operador

Descripcin

<

Menor

>

Mayor

=<

Menor que

>=

Mayor que

=\=

Diferente

is

Evala si un numero
equivale a una
expresin

=:=

Igual

mod

Modulo

14

ARITMETICA
FUNCIONES
Funcin

Descripcin

Abs

Valor absoluto

sign

Signo de un numero

Min

Valor minimo

Max

Valor maximo

Random

Numero aleatorio.

round

Redondeo

Floor

Redondeo hacia arria

ceiling

Redondeo hacia abajo

sqrt

Raiz

powm

Potencia

pi

Valor de pi
15

ARITMETICA
OTRO EJEMPLO:
sumar_3_y_duplicar(X, Y) :- Y is (X + 3) * 2.

sumar(Y):- Y is (10 + 3) * 2.

16

ATOM
Un tomo son aquellos que pertenecen al grupo de las constantes de
un vocabulario, se utiliza la orden atom para saber cuales son validas,
ejemplo:

Recuerde que las contantes deben empezar con minsculas , aunque


la orden atom tambin puede buscar en una cadena.

17

RECURSION
Ejemplo:
hijo_de(maria, carlos).
hijo_de(carlos, cristina).
hijo_de(cristina, luis).
descendiente(X, Y) :- hijo_de(X, Y).
descendiente(X, Y) :- hijo_de(X, Z), descendiente(Z, Y).

Consulta:

18

LISTAS
Trminos
Lista vacia: []
Lista compuesta: [<termino>+f| <lista>g]
<trminos>: sucesin de los primeros elementos de la lista
<lista>: lista con los restantes elementos
[a, b, c] = [a, b, c| []] = [a, b| [c]] = [a|[b, c]]
Algunas relaciones que trabajan con listas:
append(L1, L2, L3) :- La lista L3 nica con la concatenacin de las listas L1 y L2
member(E, L) :- E unica con alguno de los elementos de la lista L
reverse(L1, L2) :- La inversa de la lista L1 unica con la lista L2

19

LISTAS
Si se tiene la lista [a, b, c, d], la a es la cabeza y la cola es la lista [b, c, d]
Una lista cuya cabeza es A y cola es B se anota como *A | B+
El predicado
primer_elemento(X, [X|_]).
tiene xito si X es el primer elemento de la lista.

20

LISTAS
Existe un modulo que se carga por defecto para el manejo de listas y es el que vamos a
tratar ahora. Para manejar listas SWI-Prolog proporciona los dos trminos constructores de
la lista: [ ], la constante lista vaca; y [X|R] el operador (funcin infija) concatenar por la
cabeza, donde R debe ser una lista a su vez. Para una definicin mas formal de lista
consultar el predicado is list/1. Tambin se proporciona predicados para el manejo de listas.
is list(+Term): cierto si Term es una lista.
length(?List, ?Int): Int es el numero de elementos de la lista List.
sort(+List, -Sorted): Sorted es la lista ordenada de los elementos de List sin duplicados.
append(?List1, ?List2, ?List3): List3 es la concatnation de List1 y List2
member(?Elem, ?List): Elem es elemento de List.
nextto(?X, ?Y, ?List): Y esta despues de X en la lista List.
delete(+List1, ?Elem, ?List2): List2 es la eliminacin de todos los elementos que unifican
simultaneamente.con Elem de List1.
nth0(?Index, ?List, ?Elem): Elem es el Index -esimo elemento de List, comenzando por el 0.
reverse(+List1, -List2): List2 es List1 pero con el orden de los elementos cambiado.
21

LISTAS
listing.
dios_egipcio(amon).
dios_egipcio(anubis).
dios_egipcio(apis).
dios_egipcio(ra).

La orden findall realiza todo el


rbol

22

EJEMPLOS
listing(append/3).
lists:append([], A, A).
lists:append([A|B], C, [A|D]) :append(B, C, D).
listing(member).
lists:member(A, [A|B]).
lists:member(A, [B|C]) :member(A, C).

listing(reverse).
lists:reverse(A, B) :reverse(A, [], B, B).

lists:reverse([], A, A, []).
lists:reverse([A|B], C, D, [E|F]) :reverse(B, [A|C], D, F).

23

NEGACION
El predicado \+ tiene xito slo si fracasa su argumento.
Considere los siguientes hechos:
roja(rosa).
verde(hierba).
blanca(margarita).
Suponga la siguiente consulta:

24

Ejemplos clsicos

25

Ejemplos clsicos
Basndonos en el ejemplo anterior haremos las siguientes consultas:
%% %% consultas %% % juan es hermano de marcela?
?- hermanode('juan', 'marcela').
yes
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
yes
% maria es abuela de pablo?
?- abuelode('maria', 'pablo'). no

26

Factorial (Recursividad)
Ahora veremos como Prolog al igual que otro lenguaje tambin tiene recursividad, y que
mejor que con el clsico ejemplo de un factorial:

27

Mas sobre listas(creacin)


A continuacin haremos operaciones bsicas con listas, ntese la sintaxis para definirlas,
recuerde que una lista esta compuesta de cabeza(primer elemento) y cola(resto de los
elementos):

28

Mas sobre listas(Longitud)


% Si queremos hallar la longitud de una lista.
% La longitud de una lista vaca es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.

29

Mas sobre listas(Bsqueda)


% Si queremos determinar si un elemento pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.

30

Mas sobre listas(Eliminacin)


% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista
% como parte de la respuesta y continuamos eliminando X de la cola T.

31

Mas sobre listas(Concatenar)


% Si queremos concatenar dos listas lista.
% Concatenar una lista vaca con L es L.
% Concatenar X|L1 con L2 es poner el primer
% elemento de la primera lista (X) ms la
% concatenacin del resto de la lista (L1) con L2

32

PROLOG & MySQL


Para conectar a Prolog con una base d e datos de MySQL, recuerde que nicamente se
puede hacer va ODBC por lo cual deber tener instalado el controlador ODBC de
MySQL. En este manual partiremos suponiendo que Connector ODBC se encuentra
instalado ya que nop hay gran ciencia en la instalacin, ahora abra MySQL y cree una
base de datos, ejemplo:

33

PROLOG & MySQL


Una vez que tenemos nuestra base de datos, es hora de hacer nuestro Origen de datos
ODBC, ejemplo:
1. Abra Ejecutar o presione Windows + R y escribe lo siguiente: odbcad32
2. Se abrira el Administrador de Origenes ODBC:

3. Ahora haga clic en agregar y seleccione MySQL ODBC y despues haga clic en el boton
finalizar.
34

PROLOG & MySQL


5. Ahora configure el origen de manera anloga a lo siguiente:

6. Listo, puede hacer clic en el botn Test para probar la conexin y despus en OK,
recuerde el nombre del origen de datos ya que ser utilizado para establecer la
conexin.
35

PROLOG & MySQL


7. Ahora abra el editor de SWI-PROLOG y teclee el siguiente cdigo:

36

PROLOG & MySQL


8. Una vez que este cdigo este listo, presione F9 para compilar el cdigo(no tiene
errores) y despus en la parte del interprete teclee la siguiente consulta:

?- ejecutar(Registro).

Registro devuelto por MySQL


37

EJERCICIO
Elabore un programa en Prolog con su rbol genealgico, donde los hechos sean
nicamente predicados del tipo padre (- , -) madre (-, -)
Programe los predicados con las reglas necesarias para encontrar las relaciones de
parentesco ms comunes, tales como:
a) hermano(A,B).
b) primo(A,B).
c) tio(A,B).
d) hijo(A,B).
e) nieto(A,B).
f) abuelo(A,B).
g) bisabuelo(A,B).
h) bisnieto(A,B).
i) cuado(A,B).
j) concuo(A,B).
38

Solucin al rbol Genealgico

39

Para ms informacin:
?? Programming in XPCE/Prolog: Gua de usuario para aprender a
programar en Prolog con el XPCE, desde lo ms bsico hasta lo ms complejo.
http://www.swi.psy.uva.nl/projects/xpce/UserGuide/
?? Class summary descriptions: Pgina donde se puede encontrar informacin
sobre gran numero de clases y algunos de sus mtodos, con algn ejemplo.
http://www.swi.psy.uva.nl/projects/xpce/UserGuide/summary.html
?? Pagina principal de SWI-Prolog: Pgina de donde descargar un interprete
o la documentacin para programar en Prolog y XPCE
http://www.swi-prolog.org/
?? The XPCE online reference manual: manual de referencia con todos los
metodos y objetos que pueden ser creados y referenciados.
http://gollem.swi.psy.uva.nl:8080/

40

También podría gustarte