Čo poviete nato, keby Bandicoot riešil tento problem nasledujúcim spôsobom?
rel Zamestnanec {
id: int,
meno: string,
manager: int,
}
vsetci: Zamestnanec;
op iteruj(z: Zamestnec, m: rel{manager: int}): Zamestnanec
{
if (ids == empty)
return empty;
priamy := z * m;
manageri := priamy project(id) rename(manager = id);
return priamy + iteruj(z, manageri);
}
fn VsetciPodriadeni(n: {meno: string})
{
manageri := (vsetci * n) project(id) rename(manager = id);
return iteruj(vsetci, manageri);
}
V riešení používam operátory a inline deklarácie relačných typov, ktoré neboli v článku vysvetlené :(
Operátory navyše zataiľ nie sú implementované, ale sú na pláne pre najbližšiu verziu.
Vyzerá to tak, že tento problém je možné vyriešiť, len ak máme ako zapísať cyklus (napr. rekurziou) a podmienky (napr. pomocou if).