PDF de programación - Introducción a Prolog

Imágen de pdf Introducción a Prolog

Introducción a Prologgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 20 de Febrero del 2018)
996 visualizaciones desde el 20 de Febrero del 2018
122,5 KB
27 paginas
Creado hace 16a (21/11/2007)
Introducción a Prolog Ing. Bruno López Takeyas



INTRODUCCIÓN A PROLOG



• Lenguaje

declarativo

(opuesto

a

procedimentales) basado en reglas de la

lógica

• PROLOG = “Programming in Logic”
• Originado en Europa a principios de los
70’s por Alain Colmerauer (Universidad

de Marsella, Francia)





Programas

en Prolog




Hechos


Reglas




• La información se extrae por medio de

consultas


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

• Proposiciones:

HECHOS

o “Juan es un programador”
o “El león es un mamífero”



programador(juan).

mamifero(leon).


• Nótese que se anota primero el
predicado y entre paréntesis el sujeto de

la proposición



SINTAXIS

• Variables: Mayúsculas.
• Constantes: Minúsculas.
• Cada afirmación debe terminar con un

punto.

• No se aceptan constantes con espacios
en blanco, en lugar de ello se usa el


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

bajo

guión
primer_ministro.

(_).

P.

ejem.

• Los

comentarios empiezan

con el

símbolo %





RELACIONES

o “Juan es el padre de Miguel”





padre(juan, miguel).

REGLAS
• Sentencias condicionales
• “Si el león come carne, entonces es

carnívoro”



carnivoro(leon):- comecarne(leon)






http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

CONJUNCIONES
• Emplea el operador lógico AND
• Se utiliza la coma ( , )

tia(X,Y):-hermana(X,Z),padre(Z,Y).








(Condición)

Regla

AND

DISYUNCIONES
• Emplea el operador lógico OR
• Se utiliza el punto y coma ( ; )


hijo(X,Y):-padre(Y,X);madre(Y,X).






(Condición)

Regla

OR


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

CONSULTAS

• No es necesario programar el mecanismo

de búsqueda

• Utiliza la resolución en sus derivaciones
(generalización del modus ponendo

ponens junto con la unificación)

• P. ejem.

lagarto(iguana).
serpiente(vibora).
mamifero(conejo).


Las consultas pueden ser interactivas

mediante el indicador de comandos (?-):

?- lagarto(iguana).

¿Una iguana es un



lagarto? (Termine la

expresión con

punto)

Yes.

Respuesta de Prolog


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

?-



Indicador que

espera el sig.

Comando

?-serpiente(conejo).

¿Un conejo es



no.



serpiente?

Respuesta de Prolog

Se pueden usar variables en las consultas:

?- lagarto(X).

Nombre de un



X=iguana

Yes

lagarto (Note la X

mayúscula)

Respuesta de Prolog

(Oprima ENTER para

terminar la consulta

o ESPACIO para

buscar otra

ocurrencia)


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

Otro ejemplo:


pais(usa).
pais(canada).
pais(mexico).
capital(usa,washington).
capital(canada,ottawa).
capital(mexico,cd_mexico).


Consultas realizadas:

?- pais(mexico).
yes.

?- capital(canada,washington).
no.

?- pais(japon).
no.

?- pais(X).
X=usa
X=canada
X=mexico
yes.



http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

?- capital(canada,B).
B=ottawa
yes.

?- capital(R,washington).
R=usa
yes.



BACKTRACKING (RETROCESO)


• Las consultas pueden tener una o varias

metas

• Consideremos el sig. ejemplo:

compra(X,Y):-sevende(Y),gusta(X,Y),bueno(Y).


sevende(vestido).
sevende(sombrero).
sevende(zapatos).
gusta(jaime,zapatos).
gusta(maria,vestido).
gusta(maria,sombrero).
bueno(sombrero).



• La regla compra tiene éxito si todas sus

metas tienen éxito.


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

• Prolog intenta satisfacer las metas de la
consulta de izquierda a derecha y para

cada meta va probando las cláusulas

correspondientes


1er. Intento:


compra(Z,vestido):-

sevende(vestido),gusta(Z,vestido),bueno

(vestido).



• Busca la cláusula para sustituir Z (de izq.
teniendo a vestido como

a der.),

segundo argumento
gusta(maria,vestido)

• Se tiene ahora:

y encuentra

compra(maria,vestido):-

sevende(vestido),gusta(maria,vestido),

bueno(vestido).

• La regla fracasa porque no hay regla que

satisfaga bueno(vestido)


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

• Esto

no

significa

que

compra(maria,vestido) haya fracasado,

sino que se ha seleccionado una cláusula

que no conduce a la solución.

• Por esa razón es necesario aplicar un

retroceso (backtracking).



2o. Intento:


compra(Z,sombrero):-

sevende(sombrero),gusta(Z,sombrero),

bueno(sombrero).



• Busca la cláusula para sustituir Z (de izq.
a der.), teniendo a sombrero como

segundo argumento
gusta(maria,sombrero)

y encuentra








http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

• Se tiene ahora:

compra(maria,sombrero):-

sevende(sombrero),gusta(maria,sombrero,

bueno(sombrero).



• La regla tiene éxito porque se hace una

prueba satisfactoria a bueno(sombrero)





ENTRADA Y SALIDA


• Se usa el comando write para desplegar
un texto o una variable en la pantalla



write(‘Hola…’).

saludo:- nl, tab(4),write(‘Hola ’),



nl, tab(20), write(X).


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas
• Se usa el comando read para capturar
desde el teclado



name:- write(‘Anote su nombre:’),

read(Nombre), nl, write(‘Hola

‘),write(Nombre).



• Nótese que la variable Nombre inicia con
mayúscula.




ESTRUCTURAS


• Se pueden utilizar varios datos a la vez:
nacimiento(pedro, fecha(23,ago,1970)).



?- nacimiento(pedro, X).
X=fecha(23, ago, 1970)
yes.



http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas


• Consultas de todas las personas nacidas

en Agosto:

?- nacimiento(X, fecha(Y, ago, Z)).
X=pedro
yes.




ARITMÉTICA


• Se usa el predicado is
?- X is 3+4
X=7
yes.
• Uso de operaciones aritméticas en

predicados:

suma(A, B, C):- C is A + B.

?- suma(3, 4, 7).
yes.

?- suma(3, 4, X).
X=7


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

yes.

CICLOS


• En Prolog, casi no se usan ciclos, en

lugar de ellos se aplica recursividad; sin

embargo, se pueden implementar.
• P. ejem. Para imprimir los números del 1

al 10 se usa …

lista(M, N):- M<=N, nl, write(M),
NuevoM is M+1, lista(NuevoM, N).






LISTAS


• En Prolog no hay matrices, en su lugar

se usan Listas.

[maria, javier, juan]

[] %lista vacía


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas






CABEZA Y COLA DE 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.






http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas

IMPRIMIR LOS ELEMENTOS DE UNA

LISTA

• Si la lista no está vacía, primero se



imprime la cabeza y luego la cola:



imprimir( [A | B] ):- write(A),

imprimir(B).




AGREGAR ELEMENTOS A UNA LISTA



• Este predicado tiene tres listas: A, B y
C, donde A y B se fusionan en el mismo

orden y generan C:
agregar([A | ColaA], B,[A,ColaC]):-

agregar(ColaA, B, ColaC).


http://www.itnuevolaredo.edu.mx/takeyas Email: [email protected]

Introducción a Prolog Ing. Bruno López Takeyas



LA NEGACIÓN COMO FRACASO

• El predicado \+ tiene éxito sólo si



fracasa su argumento.

• Considere los siguientes hechos:

roja(rosa).

verde(hierba).

blanca(margarita).
• Suponga la siguiente consulta:
?- roja(amapola).
no.



• Esto no significa que las amapolas no
sean rojas, sino que no hay hechos que
lo confirmen. O sea que

?- \+roja(amapola).
yes.


?- \+roja(rosa).
no.



http://www.itnuevolaredo.edu.mx/takey
  • Links de descarga
http://lwp-l.com/pdf8924

Comentarios de: Introducción a 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