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

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

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

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

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

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