Kruhová reference - Circular reference

Cyklický odkaz je řada odkazů , kde poslední objekt odkazy první, vzniklých v uzavřené smyčce.

Kruhový odkaz (červeně)

V jazyce

Kruhový odkaz nelze zaměňovat s logickým klamem kruhového argumentu . Přestože kruhový odkaz bude často neužitečný a neodhalí žádné informace, například dva záznamy v knižním rejstříku, které na sebe odkazují, nemusí to nutně znamenat, že kruhový odkaz není k ničemu. Například slovníky musí být vždy v kruhovém odkazu, protože všechna slova ve slovníku jsou definována jinými slovy, ale slovník přesto zůstává užitečným odkazem. Věty obsahující kruhové odkazy mohou mít stále smysl:

Její bratr jí dal kotě; jeho sestra mu za to poděkovala.

je kruhový, ale ne bez významu. Skutečně lze tvrdit, že sebereflexe je nezbytným důsledkem Aristotelova zákona o rozporu , základního filozofického axiomu . V tomto pohledu se logika a matematika bez sebereference stávají nemožnými nebo přinejmenším postrádají užitečnost.

V počítačovém programování

Kruhové odkazy se mohou objevit v počítačovém programování, když jeden kus kódu vyžaduje výsledek od druhého, ale tento kód potřebuje výsledek od prvního. Například dvě funkce, posn a plus1 v následujícím programu Pythonu obsahují kruhovou referenci:

def posn(k: int) -> int:
    if k < 0:
        return plus1(k)
    return k

def plus1(n: int) -> int:
    return posn(n + 1)

Kruhové odkazy jako výše uvedený příklad mohou vrátit platné výsledky, pokud mají podmínku ukončení. Pokud neexistuje žádná podmínka ukončení, kruhová reference vede ke stavu známému jako livelock nebo nekonečná smyčka , což znamená, že teoreticky může běžet navždy.

def posn(k: int) -> int:
    return plus1(k)

def plus1(n: int) -> int:
    return posn(n + 1)

Ve standardu ISO jsou omezení kruhové integrity SQL implicitně podporována v rámci jedné tabulky. Mezi více tabulkami jsou povolena kruhová omezení (např. Cizí klíče) definováním omezení jako odložitelných (Viz VYTVOŘIT TABULKU pro PostgreSQL a DEFERRABLE Příklady omezení pro Oracle). V takovém případě je omezení zkontrolováno na konci transakce, nikoli v okamžiku provedení příkazu DML. Chcete -li aktualizovat cyklický odkaz, lze v jedné transakci vydat dva příkazy, které uspokojí oba odkazy, jakmile je transakce potvrzena.

V tabulkách

Kruhové odkazy se také vyskytují v tabulkách, když dvě buňky vyžadují vzájemné výsledky. Pokud má být například hodnota v buňce A1 získána přičtením 5 k hodnotě v buňce B1 a hodnota v buňce B1 má být získána přidáním 3 k hodnotě v buňce A1, nelze vypočítat žádné hodnoty. (I když jsou specifikace A1: = B1+5 a B1: = A1-5, stále existuje kruhová reference. Nepomáhá, že například A1 = 3 a B1 = -2 by splňovaly oba vzorce, protože existuje nekonečně mnoho dalších možných hodnot A1 a B1, které mohou uspokojit obě instance.)

Kruhová reference v listech může být velmi užitečnou technikou pro řešení implicitních rovnic, jako je Colebrookova rovnice a mnoho dalších, které by jinak mohly vyžadovat únavné Newton-Raphsonovy algoritmy ve VBA nebo používání maker.

Je třeba rozlišovat mezi procesy obsahujícími kruhovou referenci mezi těmi, které nelze spočítat, a těmi, které jsou iteračním výpočtem s konečným výstupem. Ty mohou selhat v tabulkách, které nejsou vybaveny k jejich zpracování, ale přesto jsou stále logicky platné.

Viz také

Reference