stringtranslate.com

Круговая ссылка

Циклическая ссылка (или ссылочный цикл [1] ) — это серия ссылок , в которой последний объект ссылается на первый, что приводит к замкнутому циклу.

Круговая ссылка (красным цветом)

Простой пример

Приезжий спрашивает местного жителя, где находится городская библиотека. «Прямо перед почтой», — говорит местный житель. Новичок кивает и продолжает: «А где почта?»

«Да ведь это просто», — отвечает местный житель. «Это сразу за библиотекой!»

На языке

Циклическую ссылку не следует путать с логической ошибкой циклического аргумента . Хотя циклическая ссылка часто бывает бесполезной и не раскрывает никакой информации, как, например, две записи в указателе книг, ссылающиеся друг на друга, это не обязательно означает, что циклическая ссылка бесполезна. Словари, например, всегда должны представлять собой циклическую ссылку, поскольку все слова в словаре определяются через другие слова, но словарь, тем не менее, остается полезным справочником. Предложения, содержащие циклические ссылки, могут иметь смысл:

Брат подарил ей котенка; его сестра поблагодарила его за это.

круговой, но не лишенный смысла. Действительно, можно утверждать, что самореференция является необходимым следствием Закона непротиворечия Аристотеля , фундаментальной философской аксиомы . С этой точки зрения, без самореференции логика и математика становятся невозможными или, по крайней мере, бесполезными. [2] [3]

В компьютерном программировании

Циклические ссылки могут появляться в компьютерном программировании , когда один фрагмент кода требует результата из другого, но этому коду нужен результат из первого. Например, две функции, posn и plus1 в следующей программе Python, представляют собой циклическую ссылку: [ необходимо дальнейшее объяснение ]

def  posn ( k :  int )  ->  int :  если  k  <  0 :  return  plus1 ( k )  return  kdef  plus1 ( n :  int )  ->  int :  return  posn ( n  +  1 )

Циклические ссылки, подобные приведенному выше примеру, могут возвращать действительные результаты, если у них есть завершающее условие. Если условие завершения отсутствует, циклическая ссылка приводит к состоянию, известному как livelock или бесконечный цикл , что означает, что теоретически оно может выполняться вечно.

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

В стандарте ISO ограничения циклической целостности SQL неявно поддерживаются в пределах одной таблицы. Между несколькими таблицами разрешены циклические ограничения (например, внешние ключи), если определить ограничения как отложенные (см. CREATE TABLE для PostgreSQL и Примеры ограничений DEFERRABLE для Oracle). В этом случае ограничение проверяется в конце транзакции, а не во время выполнения оператора DML. Чтобы обновить циклическую ссылку, в одной транзакции можно выполнить два оператора, которые удовлетворят обе ссылки после фиксации транзакции.

Циклические ссылки также могут возникать между экземплярами данных изменяемого типа, как, например, в этом скрипте Python:

mydict  =  {  "это" :  "это" ,  "эти" :  "те" } mydict [ "сам" ]  =  mydict print ( mydict )

Функция выведет , где указывает на циклическую ссылку, в данном случае на словарь.print(mydict){'this': 'that', 'these': 'those', 'myself': {...}}{...}mydict

В таблицах

Циклические ссылки также встречаются в электронных таблицах , когда двум ячейкам требуются результаты друг друга. Например, если значение в ячейке A1 должно быть получено путем добавления 5 к значению в ячейке B1, а значение в ячейке B1 должно быть получено путем добавления 3 к значению в ячейке A1, никакие значения вычислить невозможно. (Даже если спецификациями являются A1:=B1+5 и B1:=A1-5, все равно существует циклическая ссылка. Не помогает то, что, например, A1=3 и B1=-2 удовлетворяют обеим формулам, как существует бесконечно много других возможных значений A1 и B1, которые могут удовлетворять обоим случаям.)

Круговая ссылка в рабочих листах может быть очень полезным методом решения неявных уравнений, таких как уравнение Колбрука и многих других, которые в противном случае могли бы потребовать утомительных алгоритмов Ньютона-Рафсона в VBA или использования макросов. [4]

Следует проводить различие между процессами, содержащими циклическую ссылку, между процессами, которые невычислимы, и процессами, которые представляют собой итеративные вычисления с конечным результатом. Последнее может дать сбой в электронных таблицах, не оборудованных для их обработки, но, тем не менее, они все еще логически действительны. [3]

Смотрите также

Рекомендации

  1. ^ Клабник, Стив; Николс, Кэрол. «Опорные циклы могут привести к утечке памяти». Язык программирования Rust . Команда Руста . Проверено 8 ноября 2023 г.
  2. ^ Терри А. Осборн , Будущее образования иностранных языков в Соединенных Штатах, стр. 31–33, Greenwood Publishing Group, 2002 ISBN 0-89789-719-6
  3. ^ ab Роберт Фьенго, Роберт Мэй, Индексы и идентичность, стр. 59–62, MIT Press, 1994 ISBN 0-262-56076-3
  4. ^ «Решите неявные уравнения внутри вашего рабочего листа Анилкумара М., доктора Сринивасана Э. и доктора Рагунатана К.». Архивировано из оригинала 17 августа 2009 г. Проверено 25 июня 2009 г..