ارجاع چرخشی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

ارجاع چرخشی یک سری از ارجاعات است که آخرین شی به اولین اشاره می‌کند که نتیجه‌اش یک حلقهٔ بسته است

(قرمز) ارجاع چرخشی

در زبان[ویرایش]

یک ارجاع دایره‌ای نباید با یک استدلال غلط به اشتباه گرفته شود با آرگومان دایره‌ای. اگرچه یک ارجاع دایره‌ای اغلب غیر مفید و بدون اطلاعات را نشان می‌دهد، مثل دو ورودی در صفحه اول کتاب به یکدیگر اشاره می‌کند و آن ضروری نیست که یک ارجاع چرخشی بدون استفاده است. در دیکشنری‌ها به عنوان مثال باید همیشه در نهایت یک ارجاع چرخشی از همه کلمات در یک دیکشنری باشند که در عبارت دیگر تعریف شده، اما یک دیکشنری با این حال یک مرجع مفید باقی می‌ماند. جملاتی که شامل ارجاعات دایره هستند می‌توانند هنوز معنی‌دار باشند:

برادرش به او یک بچه گربه داد و خواهرش به خاطر آن از او تشکر کرد


این چرخشی است اما بدون معنی نیست. در واقع می‌توان گفت که ارجاع به خود لازم است در نتیجه قانون عدم تناقض ارسطو، یک اصل موضوع اساسی فلسفی. در این دیدگاه بودن خود ارجاعی، منطق و ریاضیات نشدنی می‌شوند، یا حداقل سودمندی وجود ندارد.

در تجارت[ویرایش]

گاهی اوقات پشتیبانی بی‌جا از نقشه‌های تجاری نتیجه‌اش ارجاع چرخشی خواهد شد. برای نمونه:

آلیس نیاز به بازگشت ماشین لباس‌شویی‌اش را دارد. آن معیوب است و به کارکردش احتیاج دارد او راهنمایی شد به وسیله باب مسئول خدمات پس از فروش تا گزارش دهد به کارول مسئول بازگشت و تعویض سرویس درخواستی است. کارول بنابراین به آلیس می‌گوید تا به دیوید گزارش دهد. دیوید به آلیس می‌گوید تا با باب صحبت کند.


مجموعه کاملی از مراجع که در اکنون بی‌ارزش هستند زیرا هیچ‌کدام از آنها درخواست آلیس را برآورده نمی‌کند. آلیس اجرا در اطراف داده شده است هر ارجاعی که منتهی به آلیس می‌شود به شخص دیگری اشاره می‌کند و در نهایت او ارجاع می‌دهد به شخصی که اول به آن نزدیک شد.

در برنامه‌نویسی کامپیوتر[ویرایش]

ارجاع چرخشی ممکن است مشاهده شود در برنامه‌نویسی کامپیوتر وقتی که یک قطعه کد نیاز نتیجه از دیگری است اما کد به نتیجه از اولی نیاز دارد. به عنوان مثال:
تابع A زمان آخرین غروب بر اساس تاریخ فعلی را نشان می‌دهد. تابع B تعداد دفعاتی که ماه در مدار زمین می‌چرخد را از اخرین باری که تابع B نامیده می‌شد را محاسبه می‌کند. تابع B می‌پرسد تابع C چندبار است. تابع C نمی‌داند اما می‌تواند بدست آورد با فراخوانی تابع A برای بدست آوردن زمان آخرین غروب.
مجموعه کامل از توابع در حال حاضر بی‌ارزش هستند چون هیچ‌کدام از آنها نمی‌توانند هیچ‌گونه اطلاعات مفیدی را برگردانند. این امر منجر به آن چیزی می‌شود که از لحاظ فنی به آن Livelock می‌گویند. همچنین در صفحات گسترده وقتی که دو سلول به نتیجه یکدیگر نیاز داشته باشند. به عنوان مثال، اگر مقدار سلول A1 را با اضافه کردن ۵ به مقدار سلول B1 بتوان بدست آورد و مقدار سلول B1 رابتوان با افزودن ۳ به سلول A1 بدست آورد، هیچ مقداری نمی‌تواند محاسبه شود.(حتی در صورتی که مشخصات A1:B1+5 و B1:A1-5 وجود دارد، هنوز یک ارجاع چرخشی وجود دارد کمکی نمی‌کند. به عنوان مثال A1=3,B1=-۲ هر دو فرمول را برآورده می‌کند و هم‌چنین بی‌نهایت مقدار ممکن A1,B1 وجود دارد که می‌تواند آن دو را برآورده کند)

ارجاع چرخشی نشان می‌دهد که یک مشکل بزرگ در محاسبات است. یک بن‌بست زمانی اتفاق می‌افتد که دو یا چند فرایند منتظر یکدیگرند تا منبع را آزاد کند. بیشتر پایگاه داده‌ها مثل Oracle و SQL Serever اجازه ارجاع چرخشی را نمی‌دهند زیرا معمولاً مشکلی وجود دارد با حذف یک سطر از جدول وابستگی از سطر دیگری از جدول دیگری وجود دارد. (کلید خارجی) از اسناد و مدارک فنی در مایکروسافت: محدودیت‌های کلید خارجی نمی‌تواند برای ایجاد خود ارجاعی یا محدودیت‌های کلید خارجی چرخشی مورد استفاده قرار گیرد.

برای اوراکل و PostgreSQL مشکل به روزرسانی یک ارجاع چرخشی می‌تواند با تعریف کلید متناظر خارجی به عنوان deferrable حل شود مشاهده CREATETABLE برای مثال محدودیت PostgreSQL و DEFERRABLE برای اوراکل. در این مورد محدودیت که در پایان معامله نه در آن زمان که بیانیه DDL اجرا شده است بررسی می‌شود. برای به روزرسانی ارجاعات دایره‌ای دو گزاره می‌توانند در یک معامله صادر شوند که هر دو منابع هنگامی که معامله متعهد است برآورده شده است. فقط پیوندهای درونی پشتیبانی می‌شوند و با مقایسه ستون از جداول مختلف مشخص شده‌اند. پیوندهای چرخشی پوشش داده نشده‌اند. پیوند چرخشی یک پرس و جوی SQL است که سه یا بیشتر از سه جدول باهم را در یک مدار لینک می‌کند. اوراکل با استفاده از اصطلاح Cyclic به تعیین یک ارجاع چرخشی پرداخته است.
تمایز باید با فرایندهای حاوی یک ارجاع چرخشی بین آنهایی که بی‌شمارند و آنهایی که محاسبات تکراری با خروجی نهایی دارند، باشند. دوم ممکن است در صفحه گسترده‌هایی مجهز نشده‌اند تا رسیدگی کند آن‌ها را، اما با این وجود هنوز منطقاً معتبر است.

ارجاعات چرخشی در صفحه گسترده[ویرایش]

ارجاعات چرخشی در صفحه گسترده می‌تواند یک تکنیک خیلی مفید برای حل معادلات ضمنی مانند معادله Colebrook و بسیاری دیگر، که ممکن از از روش الگوریتم Newton-Raphson در VBA یا دراستفاده ار ماکروها خسته‌کننده باشد.

منابع[ویرایش]

ویکی‌پدیای انگلیسی