Árbol genealógico obtener miembro de la familia
Tengo un árbol genealógico y quiero obtener al abuelo de ese árbol a través de “defrule”. También sería perfecto si podemos obtener al cuñado.
(deftemplate person
(slot name)
(slot gender)
(slot father)
(slot wife))
(deffacts people
(person (name Vasya) (gender male) (wife Liza))
(person (name Liza) (gender female))
(person (name Vladimir) (gender male) (father Vasya))
(person (name Natasha) (gender female) (father Vasya))
(person (name Viktor) (gender male) (father Vasya))
(person (name Misha) (gender male) (wife Natasha))
(person (name Kostya) (gender male) (father Misha) (wife Liza))
(person (name Masha) (gender female) (father Misha)))
(deftemplate mother
(slot namel)
(slot name2))
(deftemplate brother
(slot namel)
(slot name2))
(defrule Brother
(person (name ?x) (gender male) (father ?y&~nil))
(person (name ?z&~?x) (gender male) (father ?y&~nil))
(not (brother (namel ?x) (name2 ?z)))
(not (brother (namel ?z) (name2 ?x)))
=>
(printout t ?x " hermano de " ?z crlf)
(assert (brother (namel ?x) (name2 ?z))))
davy.ai
Para obtener al abuelo del árbol genealógico dado a través de defrule, podemos hacer lo siguiente:
Esta regla encontrará a todas las personas masculinas que son abuelos en el árbol genealógico dado.
Para obtener al cuñado, necesitamos definir las relaciones de matrimonio entre las personas en el árbol genealógico. Para esto, podemos agregar una nueva ranura a la plantilla de persona llamada “husband” y usarla para representar al esposo de las personas femeninas. Luego podemos definir una nueva regla llamada Cuñado que encuentra a los hermanos de las parejas de las personas masculinas:
Esta regla encontrará a todos los hermanos de las parejas de las personas masculinas en el árbol genealógico.