Practica 1
; representamos los hechos relativos a la entidad persona
(deffacts hechos-persona
(persona Juan 3423 23)
(persona Noelia 3425 3)
(persona Javier 1234 43)
(persona Lucas 2232 53)
(persona Manolo 3123 56)
(persona Amparo 8743 52)
(persona Juan 7834 34)
(persona Victor 3429 23)
(persona Vitoria 3426 34)
(persona Emilio 3635 23)
(persona Tamara 3783 22)
(persona Silvia 3894 35)
(persona Teodosio 3365 89)
(persona Inma 6756 90)
(persona Jaimito 3452 113)
(persona Tristan 3145 36)
(persona Isolda 3762 34)
(persona Jose 666 24)
)
; Representamos las relaciones entre las diferentes persona
(deffacts hechos-relaciones-persona
(padre_de 3894 3123) ; padre de tamara manolo
(madre_de 3894 8743) ; madre de tamara amparo
(conyuge_de 8743 3123) ; Amparo y Manolo forman pareja
(padre_de 3123 3365) ;padre de manolo es Teodosio
(padre_de 3365 3452) ;padre de Teodosio es jaimito
(conyuge_de 3762 3145) ; Isolda y tristan forman pareja
(padre_de 7834 3365) ; el padre de juan es teodosio
(conyuge_de 3894 7834) ; Silvia y Juan forman pareja
)
;Reglas
; Regla para ver si es hijo de
(defrule hijo-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(conyuge_de ?x ?y)
(padre_de ?z ?y)
=>
(assert (hijo_de ?x ?z)) ; el hijo de x es z
(assert (hijo_de ?y ?z)) ; el hijo de y es z
)
; regla para ver el sobrino y tio
(defrule tio-sobrino-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(persona ? ?w ?)
(padre_de ?x ?y)
(padre_de ?z ?y)
(padre_de ?w ?z)
=>
(assert (tio_de ?w ?x)) ; el tio de w es x por tanto
(assert (sobrino ?x ?w)) ;el sobrino de x es w
)
; regla para ver nieto de y abuelo de
(defrule nieto-de-abuelo-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(padre_de ?z ?y)
(padre_de ?y ?x)
=>
(assert (nieto_de ?x ?z))
(assert (abuelo_de ?z ?x))
)
; a partir de la anterior regla calculamos el bisabuelo y bisnieto.
(defrule bisabuelo-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(abuelo_de ?x ?y)
(padre_de ?z ?x)
=>
(assert (bisabuelo_de ?z ?y))
(assert (bisnieto_de ?y ?z))
)
; partir de las reglas ya calculadas nuevas vamos a crear otras para las mujeres
; regla tia de
(defrule tia-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(conyuge ?x ?y)
(tio_de ?z ?y)
=>
((assert (tia_de ?z ?x))
((assert (sobrino_de ?x ?z))
)
(defrule abuela-de
(persona ? ?x ?)
(persona ? ?y ?)
(persona ? ?z ?)
(conyuge_de ?x ?y)
(abuelo_de ?z ?y)
=>
((assert (abuela_de(?z ?x))
((assert (nieto_de(?x ?z))
)