lenguajes de programación prolog

33
Lenguajes de Programación Lenguajes lógicos: PROLOG M.C Said Zamora

Upload: saidzamora

Post on 04-Dec-2015

49 views

Category:

Documents


1 download

DESCRIPTION

Notas de PROLOG

TRANSCRIPT

Page 1: Lenguajes de Programación   PROLOG

Lenguajes de ProgramaciónLenguajes lógicos: PROLOG

M.C Said Zamora

Page 2: Lenguajes de Programación   PROLOG

Lenguajes lógicos

• Utilizan constructores lógicos para establecer relaciones.

• Átomos.

Page 3: Lenguajes de Programación   PROLOG

PROLOG

• Hechos

• Reglas

• Base de conocimiento.

• Búsquedas.

Page 4: Lenguajes de Programación   PROLOG

Base de conocimiento

• mujer(ana).

• mujer(juany).

• mujer(yolanda).

• tocaguitarra(juany).

• fiesta.

Page 5: Lenguajes de Programación   PROLOG

Búsquedas

• ?- mujer(ana).

• ?- mujer(genoveva).

• ?- party.

Page 6: Lenguajes de Programación   PROLOG

Creación de reglas.

• feliz(yolanda).

• escuchamusica(ana).

• escuchamusica(yolanda):- feliz(yolanda).

Page 7: Lenguajes de Programación   PROLOG

Búsquedas

• ?- mujer(X).

Page 8: Lenguajes de Programación   PROLOG

Base de conocimiento

• gusta(vicente,ana).

• gusta(marsellus,ana).

• gusta(calabaza,conejodechocolate).

• gusta(conejodechocolate,calabaza).

• celos(X,Y):- gusta(X,Z), gusta(Y,Z).

Page 9: Lenguajes de Programación   PROLOG

Archivos .pl

• ?- [kb2].

• ?- ['c:/Documents and Settings/…/Prolog/kb2.pl'].

• ?- listing.

Page 10: Lenguajes de Programación   PROLOG

Átomos

• String de caracteres.

• Secuencia arbitraria de caracteres entre comillas simples

• ’ &^%&#@$ &* ’

• String de caracteres especiales

• @= ====> ; :-

Page 11: Lenguajes de Programación   PROLOG

Números

• Enteros

• Flotantes

Page 12: Lenguajes de Programación   PROLOG

Variables

• X , Y , Variable , _variables , X_526 , Lista , Lista24

Page 13: Lenguajes de Programación   PROLOG

Actividad

• vINCENT• Footmassage• variable23• Variable2000• big_kahuna_burger• ’big kahuna burger’• big kahuna burger• ’Jules’• _Jules• ’_Jules’

Page 14: Lenguajes de Programación   PROLOG

Unificación

• Dos términos se unifican si son el mismo átomo

• ?- =(mia,mia).

• ?- =(mia,vincent).

Page 15: Lenguajes de Programación   PROLOG

Términos complejos

• Se construyen a partir de constantes, números y variables.

• Son llamados estructuras.

• Es una función seguido de sus argumentos.

Page 16: Lenguajes de Programación   PROLOG

Términos complejos

• canta(juany)

• busca(X,padre(padre(padre(ana))))

Page 17: Lenguajes de Programación   PROLOG

Aridad

• Número de argumentos que posee un termino complejo.

• mujer(ana)

Page 18: Lenguajes de Programación   PROLOG

Predicado

• gusta(vincent,mia)

• gusta(vincent,marsellus,mia)

• gusta/2

• gusta/3

Page 19: Lenguajes de Programación   PROLOG

Unificación de términos complejos

• Pertenecen al mismo funtor.

• Tienen la misma aridad.

• Sus argumentos pueden ser unificados.

• Las variables deben ser compatibles.

Page 20: Lenguajes de Programación   PROLOG

• ?- 2 = 2.

• yes

• ?- mia = vincent.

• No

• ?- 'mia' = mia.

• yes

Page 21: Lenguajes de Programación   PROLOG

• ?- '2' = 2.

• no

• ?- mia = X.

• X = mia

• yes

Page 22: Lenguajes de Programación   PROLOG

• ?- k(s(g),Y) = k(X,t(k)).

• X = s(g)

• Y = t(k)

Page 23: Lenguajes de Programación   PROLOG

• ?- father(X) = X.

• X = father(father(father(father(father(father• (father(father(father(father(father(father• (father(father(father(father(father(father• (father(father(father(father(father(father• (father(father(father(father(father(father

• X = father(father(father(father(...))))))))• yes

Page 24: Lenguajes de Programación   PROLOG

Recursividad

• digiere(X,Y) :- hacomido(X,Y).

• digiere(X,Y) :-

• hacomido(X,Z),

• digiere(Z,Y).

• hacomido(mosquito,sangre(cacerolo)).

• hacomido(rana,mosquito).

• hacomido(hacomido,rana).

Page 25: Lenguajes de Programación   PROLOG

Significado Declarativo y Procedimental

• Lo que dice, lo que significa como declaraciones lógicas.

• Si X digiere a Y, Prolog puede utilizar esta regla para preguntar si X se ha comido a Y.

Page 26: Lenguajes de Programación   PROLOG

• ?- digiere(caiman,mosquito).

• ?- hacomido(caiman,mosquito).

• Al unificar caimán con X y mosquito con Y

• ?- hacomido(caiman,Z),

• digiere(Z,mosquito).

Page 27: Lenguajes de Programación   PROLOG

• ?- hacomido(caiman,Z).

• ?- digiere(Z,mosquito).

• ?- hacomido(caiman,rana).

• ?- digiere(rana,mosquito).

• ?- hacomido(rana,mosquito).

Page 28: Lenguajes de Programación   PROLOG

Árbol genealógico

• hijo(anne,bridget).

• hijo(bridget,caroline).

• hijo(caroline,donna).

• hijo(donna,emily).

• descendiente(X,Y) :- hijo(X,Y).

• descendiente(X,Y) :- hijo(X,Z),

• descendiente(Z,Y).

Page 29: Lenguajes de Programación   PROLOG

Listas

• [mia, vincent, jules, yolanda]

• [mia, ladron(honey_bunny), X, 2, mia]

• []

• [mia, [vincent, jules], [butch, novia(butch)]]

• [[], muerto(z), [2, [b, c]], [], Z, [2, [b, c]]]

Page 30: Lenguajes de Programación   PROLOG

Listas

• ?- [Head|Tail] = [mia, vincent, jules, yolanda].

• Head = mia

• Tail = [vincent,jules,yolanda]

• yes

• ?- [X|Y] = [[], dead(z), [2, [b, c]], [], Z].

• X = []

• Y = [dead(z),[2,[b,c]],[],_7800]

• Z = _7800

• yes

Page 31: Lenguajes de Programación   PROLOG

Aritmética

• 6 + 2 = 8 8 is 6+2.

• 6 ∗ 2 = 12 12 is 6*2.

• 6 − 2 = 4 4 is 6-2.

• 6 − 8 = − 2 -2 is 6-8.

• 6 ÷ 2 = 3 3 is 6/2.

• 7 ÷ 2 = 3 3 is 7/2.

Page 32: Lenguajes de Programación   PROLOG

Aritmética y variables

• ?- 8 is 6+2.

• yes

• ?- 12 is 6*2.

• yes

• ?- X is 6*2.

• X = 12

• ?- R is mod(7,2).

• R = 1

Page 33: Lenguajes de Programación   PROLOG

Predicado aritmético

• sumatresyduplica(X,Y) :- Y is (X+3)*2.

• ?- sumatresyduplica(1,X).

• X = 8