सच। सभी कार्यक्रमों में निरंतरता होती है जब तक कि यह रोक नहीं जाता है। एक निरंतरता अंतर्निहित कार्यान्वयन द्वारा की गई गणना में आमतौर पर एक कदम है।
आपका उदाहरण:
(+ (* 2 3) 5)
संयोजन + संयोजन पर निर्भर है * पहले खत्म करने के लिए है। इस प्रकार (+ result 5)
वास्तव में (* 2 3)
की निरंतरता है। हालांकि यह इस संदर्भ में एक प्रक्रिया नहीं है। call/cc
की उपयोगिता तब होती है जब आपके पास निरंतरता होती है और आप इसके बजाय कुछ और करना चाहते हैं या आप बाद में इसे वापस आना चाहते हैं। चलो पहला कार्य करें:
(define g 0)
(call/cc
(lambda (exit)
(/ 10 (if (= g 0) (exit +Inf.0) g))))
जाहिर है, वहाँ एक विभाग है जो निरंतरता है जब का परिणाम है, तो किया जाता है, लेकिन exit
के बाद से पूरी बात कम + Inf.0 वापस जाने के लिए सर्किट हो जाता है चलाया जाता है।
आप इसे बाद में विभाजन करने के बिना प्रक्रिया के साथ कैसे करेंगे? इस शैली में, आप नहीं कर सकते।
यह वास्तव में जादू नहीं है क्योंकि योजना आपके कोड को Continuation Passing Style(=CPS) में परिवर्तित करती है और सीपीएस कॉल/सीसी में कोई विशेष नहीं है। यह सीपीएस में मामूली लेखन कोड नहीं है।
यहाँ call/cc
(define (kcall/cc k consumer)
(consumer k (lambda (ignore v) (k v))))
आप 'कॉल/सीसी' का उपयोग नहीं करते हैं जिसका तर्क * वर्तमान निरंतरता (एक समारोह के रूप में) ले रहा है। 'कॉल/सीसी' का उपयोग करने के लिए अपना प्रश्न संपादित करें! [निरंतरता] पर wikipage पढ़ें (http://en.wikipedia.org/wiki/Continuation) –
मैं कॉल/सीसी का उपयोग नहीं कर रहा हूं, मैं समकक्ष फ़ंक्शन का उपयोग निरंतरता का प्रतिनिधित्व करता हूं? – ayhid
निरंतरता वाक्य रचनात्मक रूप से एक कार्य है लेकिन यह नियंत्रण हस्तांतरण का प्रतिनिधित्व करता है। इसका कॉल प्रोटोकॉल फ़ंक्शन की तुलना में अलग है - इसे कभी वापस नहीं माना जाता है। –