Zur Darstellung gerichteter Graphen soll die Lösungsannotation
graphs_marks(Graphs,Marks) realisiert werden. Dabei ist Graphs eine
Liste von Prädikatsindikatoren. Jedes Prädikat beschreibt einen
gerichteten Graphen, dessen Knoten Atome (Konstanten) sind. Marks ist
eine Liste der Knoten, die gesondert hervorgehoben werden sollen (In
diesem Falle Joseph II). Die erste Relation wird durch einfache
möglichst senkrechte Striche dargestellt, die
zweite durch doppelte möglichst horizontale Striche.
kind_von(joseph_I, leopold_I). kind_von(karl_VI, leopold_I). kind_von(maria_theresia, karl_VI). kind_von(joseph_II, maria_theresia). kind_von(joseph_II, franz_I). kind_von(leopold_II, maria_theresia). kind_von(leopold_II, franz_I). kind_von(marie_antoinette, maria_theresia). kind_von(franz_II, leopold_II). gatte_gattin(franz_I, maria_theresia). :- graphs_marks([kind_von/2,gatte_gattin/2], [P]) <<< P = joseph_II.
Wichtig ist, daß die Notation wie im Skriptum beibehalten wird. Jede Person ist dort ein Knoten dargestellt als Kreis. Die Kinder der Person erkennt man dadurch, daß sie von den Kanten, die vom unteren Ende des Kreises weggehen, erreichbar sind, die Eltern von den oberen. Verheiratete werden durch Doppelstriche, die auf der linken bzw. rechten Seite eines Kreises ansetzen, dargestellt.
Der Graph soll hier vor allem die Generationsfolge schön zur Geltung bringen. Jedoch sollen auch zyklische Graphen darstellbar sein. (Sind in der Familiendatenbasis natürlich Fehler.)