RA: tema-06-ej-sol.txt Tema 6: Representación del conocimiento estructurado ============================================================================== 1. Dibujar el árbol representado por el término lista(lista(a,nil),lista(b,lista(c,nil))) ··············································································· 2. Definir la relación termino_numero_de_caminos(Arbol,N) que se verifique si N es el número de caminos en el Arbol. Por ejemplo, ?- termino_numero_de_caminos(s(c(2),p(3,4)),N). N = 8 Yes ··············································································· 3. Dado el programa arco(s,c). arco(s,p). arco(c,2). arco(p,3). arco(p,4). camino([Nodo1,Nodo2]) :- arco(Nodo1,Nodo2). camino([Nodo1,Nodo2|Nodos]) :- arco(Nodo1,Nodo2), camino([Nodo2|Nodos]). camino_hasta_hoja(Hoja,[Hoja]) :- hoja(Hoja). camino_hasta_hoja(Nodo1,[Nodo1|Nodos]) :- arco(Nodo1,Nodo2), camino_hasta_hoja(Nodo2,Nodos). hoja(N) :- not(arco(N,_Nodo)). Dibujar lo árboles SLD correspondientes a las preguntas (a) ?- camino([s|C]). (b) ?- camino_hasta_hoja(s,C). ··············································································· 4. Dado el programa :- op(1200,xfx,<-). alumno(A,P) <- [estudia(A,C), enseña(P,C)]. estudia(ana,ia) <- []. estudia(ana,pl) <- []. estudia(eva,ra) <- []. enseña(jose_a,ia) <- []. enseña(jose_a,ra) <- []. enseña(rafael,pl) <- []. arco([A|As],L) :- (A <- Cuerpo), append(Cuerpo,As,L). hoja([]). camino_hasta_hoja(Hoja,[Hoja]) :- hoja(Hoja). camino_hasta_hoja(Nodo1,[Nodo1|Nodos]) :- arco(Nodo1,Nodo2), camino_hasta_hoja(Nodo2,Nodos). Dibujar el árbol SLD correspondiente a la pregunta ?- camino_hasta_hoja([alumno(A,jose_a)],_). ··············································································· 5. Se consideran siguientes representaciones de redes de clasificación, redes semánticas y marcos: % 1. Redes de clasificación % 1.1 Representación: persona(X) :- alumno(X). persona(X) :- profesor(X). alumno(juan). alumno(luis). profesor(pablo). profesor(pedro). atributos([ciudad,estado,edad]). ciudad(pablo,mairena). ciudad(X,sevilla) :- persona(X). estado(luis,casado). estado(X,soltero) :- alumno(X). estado(X,casado) :- profesor(X). edad(juan,19). edad(luis,24). edad(pablo,44). edad(pedro,47). % 1.2 Razonamiento: propiedades(Inst,Props) :- atributos(Atrs), propiedades(Atrs,Inst,Props). propiedades([],_Inst,[]). propiedades([Atr|Atrs],Inst,[Atr=Valor|Props]) :- valor(Atr,Inst,Valor), !, propiedades(Atrs,Inst,Props). valor(A,I,V) :- P =.. [A,I,V], call(P). % 2. Redes semánticas % 2.1. Representación: es_un(persona,inicio). es_un(alumno,persona). es_un(profesor,persona). inst(juan,alumno). inst(luis,alumno). inst(pablo,profesor). inst(pedro,profesor). prop(persona,ciudad,sevilla). prop(alumno,estado,soltero). prop(profesor,estado,casado). prop(juan,edad,19). prop(luis,edad,24). prop(luis,estado,casado). prop(pablo,edad,44). prop(pablo,ciudad,mairena). prop(pedro,edad,47). % 2.2. Razonamiento: propiedades_rs(Inst,Props) :- props(Inst,P_Especificas), inst(Inst,Clase), herencia_rs(Clase,P_Especificas,Props). props(X,Props) :- findall(Atr=Valor,prop(X,Atr,Valor),Props). herencia_rs(inicio,Props,Props). herencia_rs(Clase,P_Actuales,Props) :- props(Clase,P_Generales), actualiza(P_Actuales,P_Generales,N_P_Actuales), es_un(Clase,Super_clase), herencia_rs(Super_clase,N_P_Actuales,Props). actualiza(Props,[],Props). actualiza(P_Actuales,[Atr=_Valor|P_Generales],Props) :- member(Atr=_V,P_Actuales), actualiza(P_Actuales,P_Generales,Props). actualiza(P_Actuales,[Atr=Valor|P_Generales],[Atr=Valor|Props]) :- not(member(Atr=_V,P_Actuales)), actualiza(P_Actuales,P_Generales,Props). % 3. Marcos % 3.1. Representación: clase(persona,inicio,[ciudad=sevilla]). clase(alumno,persona,[estado=soltero]). clase(profesor,persona,[estado=casado]). instancia(juan,alumno,[edad=19]). instancia(luis,alumno,[edad=24,estado=casado]). instancia(pablo,profesor,[edad=44,ciudad=mairena]). instancia(pedro,profesor,[edad=47]). % 3.2. Razonamiento: propiedades_marco(Inst,Props) :- instancia(Inst,Clase,PropsInst), herencia_marco(Clase,PropsInst,Props). herencia_marco(inicio,Props,Props). herencia_marco(Clase,P_Actuales,Props) :- clase(Clase,Super_clase,P_Generales), actualiza(P_Actuales,P_Generales,N_P_Actuales), herencia_marco(Super_clase,N_P_Actuales,Props). Dibujar los árboles de computación SLD correspondientes a las siguientes preguntas: (a) ?- propiedades(luis,P). (b) ?- propiedades(pedro,P). (c) ?- propiedades_rs(luis,P). (d) ?- propiedades_rs(pedro,P). (e) ?- propiedades_marco(luis,P). (f) ?- propiedades_marco(pedro,P).