Вы можете сначала использовать правило Гракна для создания транзитивных ссылок:
transitive-parentship sub rule, when {
(ancestor: $p, descendant: $c) isa ancestorship;
(ancestor: $c, descendant: $x) isa ancestorship;
}, then {
(ancestor: $p, descendant: $x) isa ancestorship;
}
, затем во время чтения вы можете использовать отрицание, чтобы найти самого старого предка человека:
match
$p isa person, has name "John Smit";
(ancestor: $ancient, descendant: $p) isa ancestorship;
not { (ancestor: $evenolder, descendant: $ancient) isa ancestorship; };
get $p, $ancient;
Это найдет самого старого предка, у которого нет другого предка. Обратите внимание, что для этого требуется график acylcli c!