lenguajes de programación prolog
DESCRIPTION
Notas de PROLOGTRANSCRIPT
Lenguajes de ProgramaciónLenguajes lógicos: PROLOG
M.C Said Zamora
Lenguajes lógicos
• Utilizan constructores lógicos para establecer relaciones.
• Átomos.
PROLOG
• Hechos
• Reglas
• Base de conocimiento.
• Búsquedas.
Base de conocimiento
• mujer(ana).
• mujer(juany).
• mujer(yolanda).
• tocaguitarra(juany).
• fiesta.
Búsquedas
• ?- mujer(ana).
• ?- mujer(genoveva).
• ?- party.
Creación de reglas.
• feliz(yolanda).
• escuchamusica(ana).
• escuchamusica(yolanda):- feliz(yolanda).
Búsquedas
• ?- mujer(X).
Base de conocimiento
• gusta(vicente,ana).
• gusta(marsellus,ana).
• gusta(calabaza,conejodechocolate).
• gusta(conejodechocolate,calabaza).
• celos(X,Y):- gusta(X,Z), gusta(Y,Z).
Archivos .pl
• ?- [kb2].
• ?- ['c:/Documents and Settings/…/Prolog/kb2.pl'].
• ?- listing.
Átomos
• String de caracteres.
• Secuencia arbitraria de caracteres entre comillas simples
• ’ &^%&#@$ &* ’
• String de caracteres especiales
• @= ====> ; :-
Números
• Enteros
• Flotantes
Variables
• X , Y , Variable , _variables , X_526 , Lista , Lista24
Actividad
• vINCENT• Footmassage• variable23• Variable2000• big_kahuna_burger• ’big kahuna burger’• big kahuna burger• ’Jules’• _Jules• ’_Jules’
Unificación
• Dos términos se unifican si son el mismo átomo
• ?- =(mia,mia).
• ?- =(mia,vincent).
Términos complejos
• Se construyen a partir de constantes, números y variables.
• Son llamados estructuras.
• Es una función seguido de sus argumentos.
Términos complejos
• canta(juany)
• busca(X,padre(padre(padre(ana))))
Aridad
• Número de argumentos que posee un termino complejo.
• mujer(ana)
Predicado
• gusta(vincent,mia)
• gusta(vincent,marsellus,mia)
• gusta/2
• gusta/3
Unificación de términos complejos
• Pertenecen al mismo funtor.
• Tienen la misma aridad.
• Sus argumentos pueden ser unificados.
• Las variables deben ser compatibles.
• ?- 2 = 2.
• yes
• ?- mia = vincent.
• No
• ?- 'mia' = mia.
• yes
• ?- '2' = 2.
• no
• ?- mia = X.
• X = mia
• yes
• ?- k(s(g),Y) = k(X,t(k)).
• X = s(g)
• Y = t(k)
• ?- 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
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).
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.
• ?- digiere(caiman,mosquito).
• ?- hacomido(caiman,mosquito).
• Al unificar caimán con X y mosquito con Y
• ?- hacomido(caiman,Z),
• digiere(Z,mosquito).
• ?- hacomido(caiman,Z).
• ?- digiere(Z,mosquito).
• ?- hacomido(caiman,rana).
• ?- digiere(rana,mosquito).
• ?- hacomido(rana,mosquito).
Á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).
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]]]
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
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.
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
Predicado aritmético
• sumatresyduplica(X,Y) :- Y is (X+3)*2.
• ?- sumatresyduplica(1,X).
• X = 8