Академический Документы
Профессиональный Документы
Культура Документы
progenitor(belen,pedro).
progenitor(pedro,jose).
progenitor(pedro,maria).
| ?- progenitor(pilar,belen).
Yes
| ?- progenitor(pilar,lucia).
No
2.-No: No puede deducir a partir del programa
La respuesta No indica que no se puede deducir. En la
vida real, podra ocurrir que pilar fuese madre de luca
(parece lo ms lgico) pero el sistema supone que todo lo
que no est declarado es falso1
| ?- progenitor(belen,X).
X = ana ;
X = pedro
Reglas
Reglas simples
/* Reglas */
cuida(belen,pedro):-paro(belen),
bueno(pedro).
/* 2 hechos ms */
paro(belen).
bueno(pedro).
madre(X,Y):-mujer(X),
progenitor(X,Y).
mujer(pilar). mujer(belen).
mujer(lucia). mujer(ana).
mujer(maria).
hombre(tomas). hombre(pedro).
hombre(jose).
Equivale a:
Para todo X e Y, si X es mujer y X es el progenitor de Y,
entonce X es la madre de Y
4 En lgica de predicados:
"x"y(mujer(x)progenitor(x,y)madre(x,y))
| ?- madre(belen,pedro).
yes
| ?- madre(X,belen).
X = pilar ;
no
| ?- madre(belen,X).
X = ana ;
X = pedro
no
| ?- madre(X,Y).
X = pilar ,
Y = belen ;
X = belen ,
Y = ana ;
X = belen ,
Y = pedro ;
Reglas Recursivas
antepasado(X,Y):-progenitor(X,Y).
antepasado(X,Y):-progenitor(X,Z),
antepasado(Z,Y).
grande(pepe).
grande(cabeza(juan)).
grande(X):-mayor(X,Y).
mayor(cabeza(X),cabeza(Y)):- progenitor(X,Y).
?- grande(X).
X = pepe ;
X = cabeza(juan) ;
X = cabeza(pilar) ;
X = cabeza(tomas) ;
Datos Compuestos
horizontal(seg(punto(X,Y),
punto(X1,Y))).
vertical(seg(punto(X,Y),
punto(X,Y1))).
| ?- horizontal(seg(punto(1,2),punto(3,2))).
Yes
| ?- horizontal(seg(punto(1,2),P)).
P = punto(_47796,2)
| ?- horizontal(P),vertical(P).
P=seg(punto(_29128,_29130),punto(_29128,_29130)
Unificacin
| ?- f(X,X)=f(a,Y).
X=a
Y=a
| ?- f(X,X)\=f(a,Y).
no
| ?- p(f(X),g(Z,X))=p(Y,g(Y,a)).
X=a,
Z = f(a)
El operador = se cumple si sus argumentos unifican.
El operador \= se cumple si sus argumentos no
unifican.
Puesto que Prolog no tiene chequeo de ocurrencias,
se produce un error.
Definicin
Las listas son una de las estructuras de datos ms utilizadas en los
programas en lenguaje Prolog y responden a la
siguiente definicin:
| ?- [1,2,3] = [1|[2|[3|[]]]].
yes
| ?- [X|Xs]=[1,2,3].
X=1,
Xs = [2,3]
| ?- [X|Xs]=[1].
X=1,
Xs = []
| ?- [X,Y|Ys]=[1,2,3].
X=1,
Y=2,
Ys = [3]
| ?- X = "abc".
X = [97,98,99]
pertenece(X,[X|Xs]).
pertenece(X,[Y|Ys]):- pertenece(X,Ys).
| ?- pertenece(pedro,[jose,pedro,tomas]).
yes
| ?- pertenece(jose,[]).
no
| ?- pertenece(X,[jose,pedro,tomas]).
X = jose ;
X = pedro ;
X = tomas ;
no
| ?- pertenece(jose,X).
X = [jose|_6617] ;
X = [_8808,jose|_8817] ;
X = [_8808,_11012,jose|_11021] ;
X = [_8808,_11012,_13230,jose|_13239]
...
%base de conocimiento
%entrada
entrada('tamal').
entrada('causa').
entrada('papaFritas').
%plato principal
%
carne('fileteCarne').
carne('polloAsado').
pescado('caballa').
pescado('jurel').
pescado('cabrillo').
%postre
postre('flan').
postre('mazamorra').
postre('gelatina').
%calorias de cada uno
%
calorias('tamal','50').
calorias('causa','30').
calorias('papaFritas','300').
calorias('fileteCarne','500').
calorias('polloaAsado','400').
calorias('caballa','160').
calorias('jurel','300').
calorias('cabrillon','300').
calorias('flan','200').
calorias('mazamorra','300').
calorias('gelatina','100').
plato_principal(X) :-carne(X).
plato_principal(X) :-pescado(X).
valor_calorias(X,Y,Z,V):-calorias(X,VE),calorias(Y,VP),calorias(Z,VPo), V is
VE+VP+VPo, comida(X,Y,Z).
engordo(X,y,z, Max) :-comida(X,Y,Z), valor_calorico(X,Y.Z,VC), VC>Max.
comida_equilibrada(X,Y,Z,VD):- valor_calorico(X,Y,Z,V),
V<VD.
Productos de tienda
producto_en_existencia(chetos).
producto_en_existencia(sabritas).
producto_en_existencia(doritos).
producto_en_existencia(rancheritos).
producto_en_existencia(totis).
producto_sin_existencia(fritos,$).
producto_sin_existencia(runers,$5).
producto_sin_existencia(takis,$5).
producto():write('Teclee el producto que desee '),
read(X),
producto_en_existencia(X),
write('El costo del Producto'),
write(' '),
write(X),
write(' '),
write('cuesta'),
write(' '),
write().
producto_existente(X) :-producto_sin_existente(Z),
write('Teclee el producto que desee '),
read(Z),
producto_sin_existencia(Z),
write('El producto '),
write(Z),
write(' se encuentra por el momento agotado, '),