Odniesienie okrężne
Odwołanie cykliczne to seria odniesień , w których ostatni obiekt odwołuje się do pierwszego, co skutkuje zamkniętą pętlą.
Prosty przykład
„Y”, nowicjusz w mieście pyta „Z”, gdzie znajduje się świątynia. „Z” odpowiada: „jest przed pocztą”. Po chwili zastanowienia Y ponownie pyta: „OK, powiedz mi proszę, gdzie jest poczta?” Z odpowiada: „jest przed świątynią!”
w języku
Odwołania cyklicznego nie należy mylić z błędem logicznym argumentu cyklicznego . Chociaż odniesienie cykliczne często będzie nieprzydatne i nie ujawni żadnych informacji, na przykład dwa wpisy w indeksie książek odnoszące się do siebie, niekoniecznie jest tak, że odniesienie cykliczne jest bezużyteczne. Słowniki, na przykład, zawsze muszą ostatecznie być odniesieniem okrężnym, ponieważ wszystkie słowa w słowniku są zdefiniowane w kategoriach innych słów, niemniej jednak słownik pozostaje użytecznym odniesieniem. Zdania zawierające odwołania cykliczne mogą nadal mieć znaczenie:
- Jej brat dał jej kotka; jego siostra podziękowała mu za to.
jest okrągły, ale nie bez znaczenia. Rzeczywiście, można argumentować, że samoodniesienie jest konieczną konsekwencją Arystotelesowskiego prawa niesprzeczności , fundamentalnego aksjomatu filozoficznego . Z tego punktu widzenia bez odniesienia do siebie logika i matematyka stają się niemożliwe, a przynajmniej pozbawione użyteczności.
W programowaniu komputerowym
Odwołania cykliczne mogą pojawić się w programowaniu komputerowym , gdy jeden fragment kodu wymaga wyniku z innego, ale ten kod wymaga wyniku z pierwszego. Na przykład dwie funkcje, posn i plus1 w poniższym programie w Pythonie, zawierają odwołanie cykliczne: [ potrzebne dalsze wyjaśnienia ]
0
def pozn ( k : int ) -> int : if k < : return plus1 ( k ) return k def plus1 ( n : int ) -> int : return pozn ( n + 1 )
Odwołania cykliczne, takie jak powyższy przykład, mogą zwracać prawidłowe wyniki, jeśli mają warunek kończący. Jeśli nie ma warunku końcowego, odwołanie cykliczne prowadzi do warunku znanego jako livelock lub nieskończona pętla , co oznacza, że teoretycznie może działać w nieskończoność.
def pozn ( k : int ) -> int : return plus1 ( k ) def plus1 ( n : int ) -> int : return pozn ( n + 1 )
W standardzie ISO ograniczenia integralności cyklicznej SQL są niejawnie obsługiwane w jednej tabeli. Pomiędzy wieloma tabelami ograniczenia cykliczne (np. klucze obce) są dozwolone poprzez zdefiniowanie ograniczeń jako odroczonych (zobacz CREATE TABLE dla PostgreSQL i DEFERRABLE Constraint Examples dla Oracle). W takim przypadku ograniczenie jest sprawdzane na końcu transakcji, a nie w momencie wykonywania instrukcji DML. Aby zaktualizować odwołanie cykliczne, w jednej transakcji można wydać dwie instrukcje, które spełnią oba odwołania po zatwierdzeniu transakcji.
Odwołania cykliczne mogą również wystąpić między instancjami danych o zmiennym typie, na przykład w tym skrypcie Pythona:
mydict = { "to" : "tamto" , "te" : "te" } mydict [ "ja" ] = mydict print ( mydict )
Funkcja print ( mydict )
wyświetli { 'this' : 'that' , 'these' : 'those' , 'myself' : { ... }}
, gdzie { ... }
wskazuje odwołanie cykliczne, w tym przypadku , do słownika mydict
.
W arkuszach kalkulacyjnych
Odwołania cykliczne występują również w arkuszach kalkulacyjnych , gdy dwie komórki wymagają wzajemnego wyniku. Na przykład, jeśli wartość w komórce A1 ma zostać uzyskana przez dodanie 5 do wartości w komórce B1, a wartość w komórce B1 ma zostać uzyskana przez dodanie 3 do wartości w komórce A1, żadne wartości nie mogą zostać obliczone. (Nawet jeśli specyfikacje to A1:=B1+5 i B1:=A1-5, nadal istnieje odniesienie cykliczne. Nie pomaga to, że na przykład A1=3 i B1=-2 spełniałyby oba wzory, ponieważ istnieje nieskończenie wiele innych możliwych wartości A1 i B1, które mogą spełnić oba przypadki).
Odwołania cykliczne w arkuszach mogą być bardzo użyteczną techniką rozwiązywania niejawnych równań, takich jak równanie Colebrooka i wielu innych, które w przeciwnym razie mogłyby wymagać żmudnych algorytmów Newtona-Raphsona w VBA lub użycia makr.
Należy dokonać rozróżnienia w przypadku procesów zawierających cykliczne odniesienia między tymi, których nie można obliczyć, a tymi, które są obliczeniami iteracyjnymi z końcowym wynikiem. Te ostatnie mogą zawieść w arkuszach kalkulacyjnych, które nie są przystosowane do ich obsługi, ale mimo to są nadal poprawne logicznie.
Zobacz też
- Przyczynowość – jak jeden proces wpływa na inny
- Raportowanie cykliczne — wiele źródeł danych z jednego źródła
- Zatrzymanie problemu - Problem określenia, czy dany program zakończy działanie, czy będzie działał w nieskończoność
- Funkcja zagnieżdżona — w programowaniu komputerowym funkcja zdefiniowana w ramach innej funkcji
- Quine (informatyka) - samoreplikujący się program
- Argument regresu - Problem w epistemologii polegający na tym, że każdą propozycję można w nieskończoność kwestionować
- Samoodniesienie – zdanie, idea lub formuła, które odnoszą się do siebie
- W moim wiadrze jest dziura - piosenka dla dzieci