कॉल-विद-करंट-कॉन्टीनुअशन

स्कीम (प्रोग्रामिंग भाषा) कंप्यूटर प्रोग्रामिंग भाषा में, प्रक्रिया (कंप्यूटर विज्ञान) कॉल-विद-वर्तमान-निरंतरता, संक्षिप्त कॉल/सीसी, का उपयोग नियंत्रण प्रवाह ऑपरेटर के रूप में किया जाता है। इसे कई अन्य प्रोग्रामिंग भाषाओं द्वारा अपनाया गया है।

किसी फंक्शन   को उसके एकमात्र तर्क के रूप में, अभिव्यक्ति के अंदर    को अभिव्यक्ति की वर्तमान निरंतरता पर प्रयुक्त होता है। उदाहरण के लिए   अभिव्यक्ति की वर्तमान निरंतरता में     लगाने के बराबर है। वर्तमान निरंतरता   को लैम्ब्डा एब्स्ट्रैक्शन द्वारा बंधे एक वेरिएबल     द्वारा प्रतिस्थापित करके दी गई है, इसलिए वर्तमान निरंतरता    है। फ़ंक्शन   को इसमें प्रयुक्त करने से अंतिम परिणाम मिलता है.

एक पूरक उदाहरण के रूप में, अभिव्यक्ति में, उप-अभिव्यक्ति   के लिए निरंतरता है   निरंतरता है, इसीलिए  पूरी अभिव्यक्ति    के बराबर है दूसरे शब्दों में यह ऑब्जेक्ट के रूप में प्रोग्राम के वर्तमान नियंत्रण संदर्भ या नियंत्रण स्थिति का स्नैपशॉट लेता है और उस पर   प्रयुक्त होता है। निरंतरता वस्तु प्रथम श्रेणी मान है और इसे फ़ंक्शन के रूप में दर्शाया जाता है, फ़ंक्शन अनुप्रयोग इसका एकमात्र ऑपरेशन है। जब निरंतरता वस्तु को तर्क पर प्रयुक्त किया जाता है, तो उपस्थित निरंतरता समाप्त हो जाती है और प्रयुक्त निरंतरता को उसके स्थान पर पुनः प्रारंभ कर दिया जाता है, जिससे फंक्शन का प्रवाह उस बिंदु पर जारी रहे जहां निरंतरता को कैप्चर किया गया था और निरंतरता का तर्क कॉल/सीसी आह्वान का वापसी मूल्य बन जाता है। कॉल/सीसी के साथ बनाई गई निरंतरताओं को एक से अधिक बार कॉल और यहां तक ​​कि कॉल/सीसी एप्लिकेशन की गतिशील सीमा के बाहर से भी किया जा सकता है।

कंप्यूटर विज्ञान में, इस प्रकार की अंतर्निहित प्रोग्राम स्थिति को वस्तु के रूप में दृश्यमान बनाना रीफिकेशन (कंप्यूटर विज्ञान) कहा जाता है। (योजना (प्रोग्रामिंग भाषा) निरंतरता या कार्यों को प्रयुक्त करने के बीच वाक्यात्मक रूप से अंतर नहीं करती है।)

कॉल/सीसी के साथ विभिन्न प्रकार के जटिल नियंत्रण ऑपरेटरों को कोड की कुछ पंक्तियों के माध्यम से अन्य भाषाओं से कार्यान्वित किया जा सकता है, उदाहरण के लिए, जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक)  गैर-नियतात्मक प्रोग्रामिंग के लिए ऑपरेटर (कंप्यूटर प्रोग्रामिंग), प्रोलॉग-शैली बैक ट्रैकिंग, सिमुला 67-शैली कोरआउट्स और उसके सामान्यीकरण, आइकन (प्रोग्रामिंग भाषा) शैली जेनरेटर (कंप्यूटर प्रोग्रामिंग), या इंजन (कंप्यूटर विज्ञान) और थ्रेड (कंप्यूटिंग) एस या यहां तक ​​कि अस्पष्ट COMEFROM.

या इंजन (कंप्यूटर विज्ञान) और थ्रेड (कंप्यूटिंग) एस या यहां तक ​​कि अस्पष्ट COMEFROM.थ्रेड (कंप्यूटिंग) एस या यहां तक ​​कि अस्पष्ट COMEFROM

उदाहरण
जैसा कि अगले उदाहरण में दिखाया गया है, कॉल/सीसी का उपयोग सी (प्रोग्रामिंग भाषा)-शैली भाषाओं से ज्ञात रिटर्न स्टेटमेंट के फ़ंक्शन का अनुकरण करने के लिए किया जा सकता है, जो स्कीम (प्रोग्रामिंग भाषा) में लुप्त है:

नियमित फ़ंक्शन तर्क के साथ f को कॉल करने पर पहले इस फ़ंक्शन को मान 2 पर प्रयुक्त करता है, फिर 3 लौटाता है। चूँकि, जब f को कॉल/सीसी (उदाहरण की अंतिम पंक्ति में) में पास किया जाता है, तो पैरामीटर (निरंतरता) को 2 पर प्रयुक्त किया जाता है। प्रोग्राम के निष्पादन को उस बिंदु पर जाने के लिए विवश करता है जहां कॉल/सीसी को कॉल किया गया था, और कॉल/सीसी को मान 2 वापस करने का कारण बनता है। इसे फिर डिस्प्ले फ़ंक्शन द्वारा मुद्रित किया जाता है।

अगले उदाहरण में, कॉल/सीसी का उपयोग दो बार किया जाता है: एक बार पहले उदाहरण की तरह रिटर्न निरंतरता उत्पन्न करने के लिए और एक बार वस्तुओं की सूची के माध्यम से पुनरावृत्ति को निलंबित करने के लिए:

हर बार जब लूप सूची से किसी अन्य आइटम को संसाधित करने वाला होता है, तो फ़ंक्शन वर्तमान निरंतरता को पकड़ लेता है, और इसे वेरिएबल 'कंट्रोल-स्टेट' को असाइन कर देता है। यह वेरिएबल प्रारंभ में समापन (कंप्यूटर प्रोग्रामिंग) है जो सूची के सभी तत्वों के माध्यम से पुनरावृत्त होता है। जैसे-जैसे गणना आगे बढ़ती है, यह समापन बन जाता है जो दी गई सूची के प्रत्यय के माध्यम से पुनरावृत्त होता है। जबकि रैखिक संग्रह के लिए कॉल/सीसी का उपयोग अनावश्यक है, जैसे, कोड किसी भी संग्रह को सामान्यीकृत करता है जिसे ट्रैवर्स किया जा सकता है।

कॉल-विथ-वर्तमान-निरंतरता अन्य परिष्कृत आदिमताओं को भी व्यक्त कर सकती है। उदाहरण के लिए, अगला नमूना निरंतरता का उपयोग करके सहकारी मल्टीटास्किंग करता है:

1999 में, डेविड मैडोर (अनलैम्ब्डा प्रोग्रामिंग भाषा के आविष्कारक) ने गलती से कॉल/सीसी का उपयोग करते हुए 12-वर्ण वाले अनलैम्ब्डा शब्द की खोज की, जो सभी प्राकृतिक संख्याओं को क्रमिक रूप से एकात्मक प्रतिनिधित्व में मुद्रित करता था:. इस फंक्शन और इसके प्रभाव से जुड़े स्पष्ट रहस्य ने कुछ लोगों का ध्यान आकर्षित किया है, और इसे आमतौर पर यिन-यांग पहेली के रूप में जाना जाता है। मैडोर द्वारा प्रदान किया गया योजना अनुवाद इस प्रकार है:

आलोचना
OCaml के लिए सीमांकित निरंतरता कार्यान्वयन के लेखक और नियंत्रण ऑपरेटरों को प्रयुक्त करने के लिए सीमांकित स्टैक हेरफेर के लिए अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई) के डिजाइनर ओलेग किसलीव, पूर्ण-स्टैक निरंतरता के बजाय सीमांकित निरंतरता के उपयोग की वकालत करते हैं जो कॉल/सीसी में हेरफेर करता है: कॉल/सीसी को मुख्य नियंत्रण सुविधा के रूप में पेश करना, जिसके संदर्भ में अन्य सभी नियंत्रण सुविधाएं प्रयुक्त की जानी चाहिए, बुरा विचार है। प्रदर्शन, मेमोरी और संसाधन लीक, कार्यान्वयन में आसानी, उपयोग में आसानी, तर्क करने में आसानी सभी कॉल/सीसी के विरुद्ध तर्क देते हैं।

गैर-रचनात्मक तर्क से संबंध
सबूतों और फंक्शनों के बीच करी-हावर्ड पत्राचार कॉल/सीसी को पीयर्स के नियम से जोड़ता है, जो अंतर्ज्ञानवादी तर्क को गैर-रचनात्मक, शास्त्रीय तर्क तक विस्तारित करता है: ((α → β) → α) → α। यहां, ((α → β) → α) फ़ंक्शन f का प्रकार है, जो या तो सीधे α प्रकार का मान लौटा सकता है या प्रकार (α → β) की निरंतरता के लिए तर्क प्रयुक्त कर सकता है। चूंकि निरंतरता प्रयुक्त होने पर उपस्थित संदर्भ हटा दिया जाता है, इसलिए प्रकार β का उपयोग कभी नहीं किया जाता है और इसे ⊥, खाली प्रकार के रूप में लिया जा सकता है।

दोहरे निषेध उन्मूलन का सिद्धांत ((α → ⊥) → ⊥) → α कॉल-सीसी के एक प्रकार के बराबर है जो उम्मीद करता है कि इसके तर्क एफ हमेशा सामान्य रूप से मूल्य वापस किए बिना वर्तमान निरंतरता का मूल्यांकन करेगा। शास्त्रीय तर्क को अंतर्ज्ञानवादी तर्क में एम्बेड करना निरंतरता से गुजरने वाली शैली के अनुवाद से संबंधित है।

कॉल/सीसी प्रयुक्त करने वाली भाषाएँ

 * योजना (प्रोग्रामिंग भाषा)
 * रैकेट (प्रोग्रामिंग भाषा)
 * मानक एमएल
 * मोनाड की निरंतरता में हास्केल (प्रोग्रामिंग भाषा)।
 * रूबी (प्रोग्रामिंग भाषा)
 * अनलंबा
 * सी++
 * आर प्रोग्रामिंग

यह भी देखें

 * जाओ
 * निरंतरता-गुजरने वाली शैली
 * फाइबर (कंप्यूटर विज्ञान)

बाहरी संबंध

 * A short introduction to
 * Definition of  in the Scheme spec
 * Humorous explanation of  from Rob Warnock in Usenet's
 * Cooperative multitasking in Scheme using Call-CC