lunes, 27 de agosto de 2012
Bibliografía
Base del Conocimiento I
- Ingeniero del Conocimiento.
- Experto Humano.
- Interfaz con el Experto Humano.
- Base del Conocimiento.
- Motor de Inferencia.
- Interfaz de Usuario.
- Usuario como Persona.
miércoles, 21 de marzo de 2012
Bibliografía
http://es.wikipedia.org/wiki/Inteligencia_artificial
http://es.wikipedia.org/wiki/Conferencia_de_Dartmouth
http://arkanet.galeon.com/prolog.htm
http://es.wikipedia.org/wiki/Prolog#Historia
http://www.dcc.uchile.cl/~abassi/IA/Prolog.html
http://www.monografias.com/trabajos5/prolog/prolog.shtml
martes, 20 de marzo de 2012
Datos de Integrantes
Ejercicios de Prolog
%%
%% declaraciones
%%
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :-
padrede(A,C),
padrede(C,B).
% A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo
hermanode(A,B) :-
padrede(C,A) ,
padrede(C,B),
A \== B.
% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :-
padrede(A,B).
familiarde(A,B) :-
hijode(A,B).
familiarde(A,B) :-
hermanode(A,B).
%%
%% consultas
%%
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
yes
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
yes
% maria es abuela de pablo?
?- abuelode('maria', 'pablo').
no
Factorial de un número
% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)
factorial(0, 1).
factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1.
%el factorial se llama recursivamente dejando el resultado en F
Usos de Listas en Prolog
Creación y consulta de listas
plantas([manzana, naranja, limon, espinaca, gardenia, alfalfa,pino]).
lista([H|T]).
H=1
T=[2,3]
?-lista([H,J|T]).
H=1
J=2
T=[3]
Longitud de una lista
% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.
longitud([],0).
longitud([_|T],N):-longitud(T,N0), N is N0 + 1.
?- longitud([a,b,c],L).
L = 3
?- longitud([a,b,c],4).
No
Búsqueda de un elemento
% Si queremos determinar si un elemento pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.
pertenece(X,[X|_]) :- !.
pertenece(X,[_|R]):- pertenece(X,R).
?- pertenece(b,[a,b,c]).
Yes
?- pertenece(b,[a,[b,c]]).
No
?- pertenece([b,c],[a,[b,c]]).
Yes
Eliminar elemento de una lista
% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista
% como parte de la respuesta y continuamos eliminando X de la cola T.
elimina(X,[X|T],T).
elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).
?- elimina(1,[1,2,3,4],R).
R = [2,3,4]
?- elimina(1,R,[2,3]).
R = [1, 2, 3]
R = [2, 1, 3]
R = [2, 3, 1]
Concatenar listas
% Si queremos concatenar dos listas lista.
% Concatenar una lista vacia con L es L.
% Concatenar X|L1 con L2 es poner el primer
% elemento de la primera lista (X) más la
% concatenación del resto de la lista (L1) con L2
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
?- concatenar([1,2],[3,4],R).
R = [1, 2, 3, 4].
Comprobar si una lista es la inversa de otra
% Si queremos calcular la inversa de una lista.
% La inversa de una lista vacia es una lista vacia.
% La inversa de H|T es la inversa de T concatenada con H.
inversa([],[]).
inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).
?- inversa([a,b,c,d],[d,c,b,a]).
Yes/Si
% Utilizando un parametro acumulador.
inver([H|T],L,S):-inver(T,L,[H|S]).
?- inver([a,b,c,d],[d,c,b,a]).
Yes