Jump to content

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

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

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

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

[ редактировать ]

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

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

На языке

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

def 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 = {
  "this": "that",
  "these": "those"
}
mydict["myself"] = mydict
print(mydict)

The 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. ^ Jump up to: а б Роберт Фьенго, Роберт Мэй, Индексы и идентичность , стр. 59–62, MIT Press, 1994 г. ISBN   0-262-56076-3 .
  4. ^ , Анилкумар М., доктор Шринивасан Э. и доктор Рагунатан К. «Решите неявные уравнения внутри вашего рабочего листа » Архивировано из оригинала 17 августа 2009 г. Проверено 25 июня 2009 г. .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bbdc300063de5e1007f69c46e2df0ac8__1699460640
URL1:https://arc.ask3.ru/arc/aa/bb/c8/bbdc300063de5e1007f69c46e2df0ac8.html
Заголовок, (Title) документа по адресу, URL1:
Circular reference - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)