Kruhová reference - Circular reference
Cyklický odkaz je řada odkazů , kde poslední objekt odkazy první, vzniklých v uzavřené smyčce.
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é
- Kauzalita - Jak jeden proces ovlivňuje druhý
- Cirkulární reporting -více zdrojů pro data z jednoho zdroje
- Problém se zastavením - Problém s určením, zda se daný program dokončí nebo bude pokračovat navždy
- Vnořená funkce
- Quine (výpočetní) -program, který se replikuje
- Argument regrese - Problém v epistemologii, že jakýkoli návrh lze donekonečna zpochybňovat
- Odkaz na sebe- Věta, myšlenka nebo vzorec, který odkazuje na sebe
- There Is a Hole in My Bucket - Dětská píseň