क्या योजना के कॉल / cc सभी ज्ञात नियंत्रण प्रवाह संरचनाओं को लागू कर सकते हैं?


13

पृष्ठ "उन्नत योजना: कुछ शरारती बिट्स" बताता है:

निरंतरता एक शक्तिशाली नियंत्रण-प्रवाह निर्माण है जिसमें से लगभग किसी भी अन्य नियंत्रण-प्रवाह संरचना [...] को प्राप्त किया जा सकता है।

मुझे लगा कि call/ccपीटर लैंडिन के जे ऑपरेटर से संबंधित (*) स्कीम का इस्तेमाल किसी भी ज्ञात नियंत्रण प्रवाह संरचना को लागू करने के लिए किया जा सकता है ?

"नियंत्रण प्रवाह संरचना" के साथ, मैं विशेष रूप से उनके बारे में विकिपीडिया के विवरण के बारे में सोच रहा हूं , उदाहरण के लिए, कोरआउट, हरे धागे और इतने पर।

विशेष रूप से, क्या नियंत्रण प्रवाह संरचनाओं के कोई उदाहरण हैं जिनका उपयोग करके लागू नहीं किया जा सकता है call/cc?

(*) मैं किसी भी पेपर को खोदने में सक्षम नहीं है जो स्थापित करता call/ccहै कि जे ऑपरेटर जितना शक्तिशाली है। फेलिएसेन का एक पेपर (जिसे मैंने पढ़ा नहीं है और इसे व्यक्तिगत रूप से समझने में समस्या है) पूरी तरह से इसकी पड़ताल करता है, और यह निष्कर्ष निकालता है कि भले ही वे विभिन्न जटिलता वर्गों में हैं, वे औपचारिक रूप से समकक्ष हैं।

(यह भी ध्यान दें कि मैंने नीचे टिप्पणी के आधार पर प्रश्न को अद्यतन किया है)

अपडेट करें

@ नीचे दिए गए उत्कृष्ट उत्तर के आधार पर, मैंने उन साइटों को देखा है जो सीमांकित और अनकल्ड सीमेन्ट पर टिप्पणी कर रहे हैं , और यह वास्तव में ऐसा प्रतीत होता है कि जबकि call/cc, सीमांकित किया जा रहा है, पर्याप्त नहीं है। इस बीच, प्रथम-श्रेणी, सीमांकित निरंतरता (जैसे shift/reset) का उपयोग किया जा सकता है, ऐसा लगता है, किसी भी नियंत्रण-प्रवाह संरचना को व्यक्त करने के लिए।


5
"नियंत्रण प्रवाह संरचना" की औपचारिक परिभाषा क्या है?
हक बेनेट

4
पुन: निरंतर जारी रखा। क्या आपने हेओ थिएलेके द्वारा संदर्भित पेपर पढ़ा? वास्तविक दावा यह है कि राज्य की अनुपस्थिति में अपवादों को व्यक्त नहीं कियाcall/cc जा सकता है । (जैसा कि थिएलेके इंगित करने के लिए आगे बढ़ता है, अपवादों को दो निरंतरताओं के आसपास से गुजरते हुए लागू किया जा सकता है, एक कार्यक्रम के लिए और दूसरा अपवाद हैंडलर के लिए, लेकिन इसके लिए अधिक से अधिक आवश्यकता होती है ।)call/cc
रीकी

@ चित्र: मैंने केवल पहले कुछ पृष्ठों को स्किम्ड किया है। (पेपर पढ़ने में मुझे बहुत समय लगता है)। टिप्पणी के लिए धन्यवाद!
सीएसएल

@HuckBennett की मेरे पास कोई औपचारिक परिभाषा नहीं है, लेकिन अनौपचारिक रूप से मेरा मतलब है कि यह en.wikipedia.org/wiki/Control_flow में वर्णित है - विशेष रूप से मेरा मतलब है कि आप जारी रखने के लिए निरंतरता का उपयोग कर सकते हैं, और इससे भी महत्वपूर्ण बात, लागू करने के लिए, coroutines, हरे रंग के धागे, अपवाद, भागने के बयान, amb-ओपरेटर, और इसी तरह।
सीएसएल

2
@ एससीएल अधिक सटीक बनाने के अलावा, "नियंत्रण प्रवाह संरचना" का अर्थ है, आपको कुछ और स्पष्ट करने की भी आवश्यकता है कि इसका अर्थ क्या है "व्यक्त"। यह एक कठिन समस्या है, और आपके प्रश्न का उत्तर इस बात पर दृढ़ता से निर्भर करता है कि आप अभिव्यक्ति के रूप में क्या गिनाते हैं। आखिरकार, आप हमेशा किसी न किसी ट्यूरिंग मशीन को कोड कर सकते हैं, जो अपवादों (जैसे जावा) के साथ एक भाषा की व्याख्या करता है। लेकिन यह शायद आपके दिमाग में नहीं है, इसलिए आपको "अभिव्यक्ति" (जैसे रचना और / या पूर्ण अमूर्तता) की अवधारणा पर मजबूत अवरोधों को लगाने की आवश्यकता है।
मार्टिन बर्गर

जवाबों:


11

इस उत्तर में, मैं फेलिसन 1991 के अर्थ में "मैक्रो-एक्सप्रेसिबल" का अर्थ "एक्सप्रेस करने योग्य" ले लूंगा, ऑन द एक्सप्रेसिव पावर ऑफ प्रोग्रामिंग लैंग्वेजेस । (वास्तव में, एक भाषा सुविधा मैक्रो-एक्सप्रेसिबल है यदि आप इसे पूरे प्रोग्राम ट्रांसफॉर्मेशन का उपयोग किए बिना स्थानीय स्रोत परिवर्तन के रूप में परिभाषित कर सकते हैं।)

इस परिभाषा के साथ, इसका उत्तर नहीं है : लंबित नियंत्रण लंबो-कैल्कुलस + कॉल / सीसी में मैक्रो-एक्सप्रेस करने योग्य नहीं है। कॉल / सीसी का उपयोग करके सीमांकित नियंत्रण ऑपरेटरों को व्यक्त करने के लिए। नियंत्रण के सीमांकक (शिफ्ट / रीसेट का रीसेट भाग) को लागू करने के लिए, आपको निरंतरता के निशान के गतिशील जीवनकाल का अनुकरण करने के लिए आवश्यक रूप से निरंतरता के निशान का अनुकरण करने के लिए कुछ राज्य की आवश्यकता होती है।

हालांकि, निम्नलिखित अर्थों में, सीमांकित नियंत्रण एक सार्वभौमिक प्रभाव है। अपने पीएचडी थीसिस में , आंद्रेज फिलिंसकी ने दिखाया कि किसी भी व्यक्त पक्ष प्रभाव को सीमांकित निरंतरता, या कॉल / सीसी और राज्य के एक सेल का उपयोग करके एन्कोडेबल है। मोटे तौर पर, "अभिव्यंजक साइड इफेक्ट" कोई भी प्रभाव होता है, जिसका मौद्रिक प्रकार प्रोग्रामिंग भाषा के प्रकारों के संदर्भ में परिभाषित किया जा सकता है।

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

Matija Pretnar और Andrej Bauer ने इस गणितीय दृष्टिकोण को अपनाया, और फिर इसे "इफ़ेक्ट हैंडलर" नामक एक नई भाषा के निर्माण के लिए अपनी प्रयास भाषा में लागू किया : आप ऐसे कोड लिख सकते हैं जो अत्यावश्यक सुविधाओं का उपयोग करते हैं, और फिर शाही विशेषताओं को एक शब्दार्थ प्रदान करते हैं। हैंडलर का एक सेट लिखकर, जो कहता है कि प्रत्येक प्रभावी संचालन को कैसे लागू किया जाए।


लेकिन अगर परिभाषा यह है: "क्या आप स्कीम और कॉल / सीसी का उपयोग करके किसी भी नियंत्रण प्रवाह संरचना को लागू कर सकते हैं " (अनुकरण के बिना), तो उत्तर हां होना चाहिए ? LtU चर्चा को देखते हुए lambda-the-ultimate.org/node/966 ऐसा लगता है कि ओलेग किसलीव ने कॉल / सीसी के साथ सभी चार एफ-ऑपरेटर्स को योजना में लागू किया: okmij.org/ftp/continuations/… - अंश "कोड निर्भर करता है अंडरलेयर्ड कंटिन्यू को कैप्चर करने के लिए कॉल / cc पर, और एक ग्लोबल म्यूटेबल सेल का उपयोग करता है। यह पता चला है, इसे लागू करने के लिए पर्याप्त [...] अन्य F ऑपरेटर्स "। ... "-F- के माध्यम से + एफ + एफ"।
सीएसएल

मैं आपके जवाब के लिए एक फ्रेम के रूप में फेलिसन की "मैक्रो-एक्सप्रेसवेबिलिटी" के आपके उपयोग को स्वीकार करता हूं, लेकिन जैसा कि आप देख सकते हैं कि मैंने कॉल / सीसी का उपयोग करके "स्कीम में" लागू करने के लिए अपने प्रश्न को विशेष रूप से बदल दिया है। और जबकि ओलेग किसलीव को सीमांकित निरंतरता के लिए सभी चार एफ ऑपरेटरों को लागू करने के लिए एक वैश्विक परिवर्तनशील सेल शुरू करने की आवश्यकता है, मुझे नहीं लगता कि यह "कार्यक्रम का प्रमुख, वैश्विक पुनर्गठन" --- व्यावहारिक रूप से बोल रहा है।
सीएसएल

मैं इस जवाब को स्वीकार करने जा रहा हूं। मैं okmij.org/ftp/continuations/undelimited.html#delim-vs-undelim पर पाठ को इंगित करना चाहता हूं जिसमें अतिरिक्त संकेत हैं। यह भी लगता है कि किसी भी नियंत्रण प्रवाह संरचना को लागू करने के लिए प्रथम श्रेणी, सीमांकित निरंतरता जैसे बदलाव / रीसेट का उपयोग किया जा सकता है। लिंक से: "प्रथम श्रेणी के सीमांकित निरंतरता अपवाद और उत्परिवर्ती राज्य सहित किसी भी व्यक्त कम्प्यूटेशनल प्रभाव को व्यक्त कर सकते हैं।"
सीएसएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.