Upload
josemerino
View
33
Download
1
Embed Size (px)
Citation preview
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% UNIMINUTO VIRTUAL Y DISTANCIA %%%% %%%% SISTEMAS EXPERTOS %%%% %%%% 145313 - Jose Antonio Merino - 2013-Feb-09 %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/* a *//* Qué personas son Parientes de otras *//*------------------------------------------------------------------*/hombre('abuelo_01').hombre('abuelo_02').hombre('tio_01').hombre('tio_02').hombre('papa_01').hombre('hijo_01_02').
mujer('abuela_01').mujer('abuela_02').mujer('tia_01').mujer('tia_02').mujer('mama_02').mujer('hija_01_02').
es_progenitor('abuela_01','tio_01').es_progenitor('abuela_01','tia_01').es_progenitor('abuela_01','papa_01').
es_progenitor('abuelo_01','tio_01').es_progenitor('abuelo_01','tia_01').es_progenitor('abuelo_01','papa_01').
es_progenitor('abuela_02','tio_02').es_progenitor('abuela_02','tia_02').es_progenitor('abuela_02','mama_02').
es_progenitor('abuelo_02','tio_02').es_progenitor('abuelo_02','tia_02').es_progenitor('abuelo_02','mama_02').
es_progenitor('papa_01','hijo_01_02').es_progenitor('papa_01','hija_01_02').
es_progenitor('mama_02','hija_01_02').es_progenitor('mama_02','hijo_01_02').
son_hermanos('tio_01','tia_01').son_hermanos('tia_01','tio_01').son_hermanos('tio_01','papa_01').son_hermanos('papa_01','tio_01').son_hermanos('papa_01','tia_01').son_hermanos('tia_01','papa_01').
son_hermanos('tio_02','tia_02').son_hermanos('tia_02','tio_02').son_hermanos('tio_02','mama_02').son_hermanos('mama_02','tio_02').son_hermanos('mama_02','tia_02').son_hermanos('tia_02','mama_02').
son_hermanos('hijo_01_02','hija_01_02').son_hermanos('hija_01_02','hijo_01_02').
/* Consultas de parentesco */
es_hermano(H,Z):-hombre(H),son_hermanos(H,Z).
es_hermana(M,Z):-mujer(M),son_hermanos(M,Z).
es_padre(X,Y):-es_progenitor(X,Y),hombre(X).
es_madre(X,Y):-es_progenitor(X,Y),mujer(X).
es_tio(X,Y):-es_progenitor(Z,Y),es_hermano(X,Z).
es_tia(X,Y):-es_hermana(X,Z),es_progenitor(Z,Y).
es_abuelo(X,Y):-es_padre(X,Z),es_progenitor(Z,Y).
es_abuela(X,Y):-es_madre(X,Z),es_progenitor(Z,Y).
es_nieto(X,Y):-es_abuelo(Y,X),hombre(X);es_abuela(Y,X),hombre(X).
es_nieta(X,Y):-mujer(X),(es_abuelo(Y,X);es_abuela(Y,X)).
/* es_nieta(X,Y):-es_abuelo(Y,X),mujer(X);es_abuela(Y,X),mujer(X). *//*------------------------------------------------------------------*//*------------------------------------------------------------------*//*------------------------------------------------------------------*/
/* b *//*------------------------------------------------------------------*//* Regresa el elemento que se encuentra en la posicion N de la lista *//* Ejemplo de Consulta */%% elemento_en_N([],N,?).%% elemento_en_N([6,7,8,9,3],3,X).% X = 8.%% elemento_en_N([6,7,8,9,3],5,X).% X = 3.
elemento_en_N([],N,[]):-!.elemento_en_N([X|N],1,X):-!.elemento_en_N([X|R],N,S):-M is N - 1,elemento_en_N(R,M,S)./*------------------------------------------------------------------*//*------------------------------------------------------------------*/
/* c *//*------------------------------------------------------------------*//* Elimina el elemento que se encuentra en la posicion N de la lista*//* Ejemplo de Consulta */%% elimina_en_N([],N,?).%% elimina_en_N([6,7,8,9,3],3,X).% X = [6,7,9,3].%% elimina_en_N([6,7,8,9,3],5,X).% X = [6,7,8,9].
elimina_en_N([X|Y],1,Y):-!.elimina_en_N([X|Y],N,[X|R]):-N1 is N-1, elimina_en_N(Y,N1,R)./*------------------------------------------------------------------*//*------------------------------------------------------------------*/
/* d *//*------------------------------------------------------------------*//* Invertir una lista */%% Para invertir la lista definimos antes concatenar dos lista.%/*Concatenar una lista vacía con otra lista L resulta la lista L*/concatena_dos_listas([],L,L)./*concantenar la lista cuyo primer elemento es X|M con otra lista L da como resultado una lista cuyo primer elemento va a seguir siendo X|Z donde Z es nuevamente la concatenacion de M con L. */concatena_dos_listas([X|M],L,[X|Z]):-concatena_dos_listas(M,L,Z)./*Ejemplo de Consulta concatena_dos_listas
concatena_dos_listas([2,3,4],[5,6,7,8],Z).
Z = [2, 3, 4, 5, 6, 7, 8].*/% concatena_dos_listas([4,5,6],[1,2,3,4],X).% X = [4, 5, 6, 1, 2, 3, 4].%%/*Invertir una lista de un solo elemento resulta la lista con el mismo elemento*/invertir_lista([X],[X])./*Invertir una lista cuyo primer elemento es X equivale a concatenar otra lista Sdejando al primer elemento X como el último. Todo el resto(cola M) secoloca delante de X que equivale a S, y M(la cola) se vuelve a invertir*/invertir_lista([X|M],Z):-invertir_lista(M,S), concatena_dos_listas(S,[X],Z)./* ------------------------------------------------------------------*//* Ejemplo de Consulta invertir_lista
invertir_lista([10,9,8,7],Z). Z = [7, 8, 9, 10]
invertir_lista([7,'T'],Z). Z = ['T', 7]
*//*------------------------------------------------------------------*//*------------------------------------------------------------------*/
/* e *//*---------------------------------------------------------------*//* Establecer si un elemento está o no en una lista
Ejemplo de Consulta elemento_esta
elemento_esta(5,[4,7,3,5,6,9]). true.
elemento_esta(2,[4,7,3,5,6,9]). false.
*/elemento_esta(X,[X|M]):-!.elemento_esta(X,[R|M]):-elemento_esta(X,M)./*---------------------------------------------------------------*//*------------------------------------------------------------------*/