ارجاع چرخشی

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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