datatype 'a person = empty | Person of ('a * 'a person list); val Julie = Person("Julie",[]) and David = Person("David",[]) and Sally = Person("Sally",[]) and Graham = Person("Graham",[]) and Tom = Person("Tom",[]) and Laura = Person("Laura", []) and Katie = Person("Katie",[]) and Martin = Person("Martin",[]); val Denis = Person("Denis",[Julie,David]) and Susie = Person("Susie",[Sally,Graham,Tom]) and Patrick = Person("Patrick",[]) and Stan = Person("Stan",[Laura,Martin,Katie]) and Louise = Person("Louise",[]); val Johaan = Person("Johaan",[Denis,Susie,Patrick,Stan,Louise]); - val Person(name,children) = Denis; val name = "Denis" : string val children = [Person ("Julie",[]),Person ("David",[])] : string person list - val family = [Johaan]; val family = [Person ("Johaan",[Person #,Person #,Person #, Person #, Person #])] : string person list - find "Denis" family; << Find Denis in the family >> val it = Person ("Denis",[Person (#,#),Person (#,#)]) : string person - find "Peter" family; << Find Peter in the family >> val it = empty : string person - find "Sally" family; << Find Sally in the family >> val it = Person ("Sally",[]) : string person - ancestorp "Johaan" "Tom" family; << Is Johaan an ancestor of Tom ? >> val it = true : bool - ancestorp "Peter" "Tom" family; << Is Peter an ancestor of Tom? >> val it = false : bool - ancestorp "Denis" "Tom" family; << Is Denis an ancestor of Tom >> val it = false : bool