Professional Documents
Culture Documents
Sistemas de Deducción
Sistemas de Reacción
Modelamiento Cognitivo
• Hechos:
• H1: A (dato de partida)
• H3: Z (objetivo a alcanzar)
Encadenamiento Progresivo y
Regresivo
• Preguntas
• ¿ "pichurri" vuela ?
• ¿ qué mascotas vuelan ?
PROLOG
• Términos: constantes (a), variables (X),
funciones (f(X, Y ))
tipo-cliente(X,bueno)
PROLOG
• Fórmulas bien formadas (wff): fórmulas
atómicas unidas por conectivas (^, _,!, ¬) y
cuantificadas (1A universal, 1B existencial)
• progenitor(X, Y ) :- padre(X, Y ).
• progenitor(X, Y ) :- madre(X, Y ).
PROLOG
• abuelo(X,Y) :- padre(X,Z), madre(Z,Y).
• abuelo(X,Y) :- padre(X,Z), padre(Z,Y).
• hechos: A. (A átomo)
• reglas: A :- A1, ..., An. (n>0, y A, A1, ..., An
átomos)
PROLOG
• Hechos:
– padece(jon, gripe).
– padece(jon, hepatitis).
– padece(ana, gripe).
– padece(carlos, alergia).
– es-síntoma(fiebre, gripe).
– es-síntoma(cansancio, gripe).
– es-síntoma(estornudos, alergia).
– suprime(paracetamol, fiebre).
– suprime(antihistamínico, estornudos).
PROLOG
• Reglas:
– debe-tomar(Per, Far) :- padece(Per, Enf),
alivia(Far, Enf).
– alivia(Far, Enf) :- es-síntoma(Sin, Enf),
suprime(Far, Sin).
• Preguntas:
– ? padece(carlos, gripe).
– ? padece(jon, Z).
– ? alivia(paracetamol, gripe).
PROLOG
– ? alivia(X, gripe).
– ? debe-tomar(Y, antihistamínico).
– ? alivia(X, Y).
– ? suprime(X, fiebre), suprime(X, estornudos).
%% declaraciones
padrede('juan', 'maria').
padrede('pablo', 'juan').
PROLOG
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
%%Reglas
% A es hijo de B si B es padre de A hijode(A,B)
:- padrede(B,A).
abuelode(A,B) :- padrede(A,C), padrede(C,B).
hermanode(A,B) :- padrede(C,A) ,
padrede(C,B), A \== B.
familiarde(A,B) :- padrede(A,B).
PROLOG
familiarde(A,B) :- hijode(A,B).
familiarde(A,B) :- hermanode(A,B).
%% consultas
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
Yes
?- hermanode('carlos', 'juan'). No
?- abuelode('pablo', 'maria'). Yes
?- abuelode('maria', 'pablo'). no
PROLOG
%unificación con evaluación.
?- X is 3+5.
X=8
%unificación simbólica
?- X = 3+5.
X = 3+5
PROLOG
%comparación con evaluación
?- 3+5 =:= 2+6.
yes
%comparación simbólica.
?- 3+5 == 2+6.
no
?- 3+5 == 3+5.
yes
PROLOG
• Los programas en PROLOG se definen a
través de Algoritmos, Lógica y Control.
• %preguntas
PROLOG
• ¿Le gusta la música a Pepé y a María?
• ?_ legusta(pepe,musica), legusta(maria,
musica).
• %Sucesiones
• sucesor(1,2).
• sucesor(2,3).
• sucesor(3,4).
• sucesor(4,5).
PROLOG
• sucesor(6,7).
• suma(1,X,R):-sucesor(X,R).
• suma(N,X,R):-sucesor(M,N), suma(M,X, R1),
sucesor(R1, R).
• edad(luis,25).
• edad(hugo,32).
• edad(paco,29).
• edad(jaime,67).
• edad(laura,85).
• es_viejo(Persona) :- edad(Persona,Valor),
valor > 60.
Ejercicio
• padre(X,Y) – X es padre de Y
• madre(X,Y) – X es madre de Y
• es_padre(X) – X es un padre
• es_madre(X) – X es una madre
• es_hijo(X) – X es un hijo (hombre)
• hermana(X,Y) – X es hermana de Y
• abuelo(X,Y) – X es abuelo (hombre) de Y
• tia(X,Y) – X es tía de Y
• primo(X,Y) – X es primo (hombre) de Y
PROLOG
• Prolog tiene la característica de ser
reversible; es decir, los argumentos pueden
ser de entrada y salida. Si se tiene un
predicado abuelo se puede saber quienes
son los nietos de ese abuelo.
• Persona(“Helena”, edad(22),
dirección(‘Miguel Hidalgo 33’, ‘Centro’,
PROLOG
• Se pueden utilizar estructuras de datos
recurrentes como árboles, en donde el primer
elemento podría ser un nodo, el segundo el
hijo izquierdo y el tercer elemento, el hijo
derecho.
• L = [1, 2, 3, 4, 5],
• M = [0 | L].
• ?- atom_codes(juan, X).
• X = [106, 117, 97, 110].
• //Comprobación de tipos
• es_lista([]).
• es_lista([_|B]):-es_lista(B).
PROLOG
• ?- es_lista([a]).
• fac(0,1).
• fac(N,F) :- N > 0, M is N - 1, fac(M,Fm), F is N
* Fm.
• sumar_lista([Num|Resto],Parcial,Result) :-
NParcial is Num+Parcial,
sumar_lista(Resto,NParcial,Result).
• leer_numero(Num) :- read(Num),
number(Num).
PROLOG
• suma :- suma_aux([]).
• suma_aux(Lista) :- leer_numero(Num),
suma_aux([Num|Lista]).
• suma_aux(Lista) :-
sumar_lista(Lista,0,Result), nl,
display('LA SUMA ES : '), display(Result),
nl.
Questions?