Вы находитесь на странице: 1из 33

Lenguajes de Programacin

Lenguajes lgicos: PROLOG


M.C Said Zamora

Lenguajes lgicos
Utilizan constructores lgicos para establecer relaciones.
tomos.

PROLOG
Hechos

Reglas

Base de conocimiento.

Bsquedas.

Base de conocimiento
mujer(ana).
mujer(juany).
mujer(yolanda).
tocaguitarra(juany).

fiesta.

Bsquedas
?- mujer(ana).
?- mujer(genoveva).
?- party.

Creacin de reglas.
feliz(yolanda).
escuchamusica(ana).
escuchamusica(yolanda):- feliz(yolanda).

Bsquedas
?- 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


@= ====> ; :-

Nmeros
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

Unificacin
Dos trminos se unifican si son el mismo tomo
?- =(mia,mia).
?- =(mia,vincent).

Trminos complejos
Se construyen a partir de constantes, nmeros y variables.
Son llamados estructuras.
Es una funcin seguido de sus argumentos.

Trminos complejos
canta(juany)
busca(X,padre(padre(padre(ana))))

Aridad
Nmero de argumentos que posee un termino complejo.

mujer(ana)

Predicado
gusta(vincent,mia)
gusta(vincent,marsellus,mia)
gusta/2
gusta/3

Unificacin de trminos 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 lgicas.
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 caimn 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 genealgico
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

Aritmtica
6+2=8
6 2 = 12
62=4
68=2
62=3
72=3

8 is 6+2.
12 is 6*2.
4 is 6-2.
-2 is 6-8.
3 is 6/2.
3 is 7/2.

Aritmtica 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 aritmtico
sumatresyduplica(X,Y) :- Y is (X+3)*2.
?- sumatresyduplica(1,X).
X=8

Вам также может понравиться