Example 5.172. Relation class - examples
/* Use a relation to express parent-child relationships */
family = .relation~new
family["Henry"] = "Peter" /* Peter is Henry's child */
family["Peter"] = "Bridget" /* Bridget is Peter's child */
family["Henry"] = "Jane" /* Jane is Henry's child */
/* Show all children of Henry recorded in the family relation */
henrys_kids = family~allAt("Henry")
Say "Here are all the listed children of Henry:"
Do kid Over henrys_kids
Say " "kid
End
/* Show all parents of Bridget recorded in the family relation */
bridgets_parents = family~allIndex("Bridget")
Say "Here are all the listed parents of Bridget:"
Do parent Over bridgets_parents
Say " "parent
End
/* Display all the grandparent relationships we know about. */
checked_for_grandkids = .set~new /* Records those we have checked */
Do grandparent Over family /* Iterate for each index in family */
If checked_for_grandkids~hasIndex(grandparent)
Then Iterate /* Already checked this one */
kids = family~allat(grandparent) /* Current grandparent's children */
Do kid Over kids /* Iterate for each item in kids */
grandkids = family~allAt(kid) /* Current kid's children */
Do grandkid Over grandkids /* Iterate for each item in grandkids */
Say grandparent "has a grandchild named" grandkid"."
End
End
checked_for_grandkids~put(grandparent) /* Add to already-checked set */
End