संदर्भात्मक पारदर्शिता शब्द का क्या अर्थ है? मैंने इसे "के रूप में वर्णित किया है, इसका मतलब है कि आप इसे बराबरी के साथ बदल सकते हैं" लेकिन यह एक अपर्याप्त विवरण की तरह लगता है।
संदर्भात्मक पारदर्शिता शब्द का क्या अर्थ है? मैंने इसे "के रूप में वर्णित किया है, इसका मतलब है कि आप इसे बराबरी के साथ बदल सकते हैं" लेकिन यह एक अपर्याप्त विवरण की तरह लगता है।
जवाबों:
शब्द "संदर्भात्मक पारदर्शिता" विश्लेषणात्मक दर्शन से आता है , दर्शन की शाखा जो तर्क और गणित के तरीकों के आधार पर प्राकृतिक भाषा के निर्माण, बयानों और तर्कों का विश्लेषण करती है। दूसरे शब्दों में, यह कंप्यूटर विज्ञान के बाहर का निकटतम विषय है जिसे हम प्रोग्रामिंग भाषा शब्दार्थ कहते हैं । दार्शनिक विलार्ड क्वीन संदर्भात्मक पारदर्शिता की अवधारणा को शुरू करने के लिए जिम्मेदार थे, लेकिन यह बर्ट्रेंड रसेल और अल्फ्रेड व्हाइटहेड के दृष्टिकोण में भी निहित था।
इसके मूल में, "संदर्भात्मक पारदर्शिता" एक बहुत ही सरल और स्पष्ट विचार है। शब्द "रेफ़रेंट" का उपयोग विश्लेषणात्मक दर्शन में उस चीज़ के बारे में बात करने के लिए किया जाता है जिसे एक अभिव्यक्ति संदर्भित करती है । यह लगभग वैसा ही है जैसा कि प्रोग्रामिंग भाषा के शब्दार्थों में "अर्थ" या "डीनोटेशन" से हमारा मतलब है। एंड्रयू बिर्केट के उदाहरण ( ब्लॉग पोस्ट ) का उपयोग करते हुए , शब्द "स्कॉटलैंड की राजधानी" एडिनबर्ग शहर को संदर्भित करता है। यह एक "संदर्भ" का एक सीधा उदाहरण है।
एक वाक्य में एक संदर्भ "संदर्भित रूप से पारदर्शी" है यदि उस संदर्भ में एक शब्द को दूसरे शब्द द्वारा प्रतिस्थापित किया जाए जो उसी इकाई को संदर्भित करता है जो अर्थ में परिवर्तन नहीं करता है। उदाहरण के लिए
स्कॉटलैंड की संसद स्कॉटलैंड की राजधानी में मिलती है।
के रूप में ही मतलब है
स्कॉटिश संसद एडिनबर्ग में मिलती है।
तो संदर्भ "स्कॉटिश संसद में मिलता है ..." एक संदर्भात्मक पारदर्शी संदर्भ है। हम अर्थ को बदले बिना "एडिनबर्ग" के साथ "स्कॉटलैंड की राजधानी" को बदल सकते हैं। एक और तरीका रखने के लिए, संदर्भ केवल इस बात की परवाह करता है कि शब्द क्या संदर्भित करता है और कुछ नहीं। यह वह अर्थ है जिसमें संदर्भ "संदर्भ रूप से पारदर्शी है।"
दूसरी ओर, वाक्य में,
एडिनबर्ग 1999 से स्कॉटलैंड की राजधानी रहा है।
हम ऐसा कोई प्रतिस्थापन नहीं कर सकते। यदि हमने किया, तो हमें "एडिनबर्ग 1999 से एडिनबर्ग रहा है", जो कहने के लिए एक पौष्टिक बात है, और मूल वाक्य के समान अर्थ को व्यक्त नहीं करता है। तो, ऐसा लगता है कि संदर्भ "एडिनबर्ग रहा है ... 1999 के बाद से" संदर्भित रूप से अपारदर्शी है (संदर्भित रूप से पारदर्शी के विपरीत)। यह जाहिरा तौर पर के बारे में परवाह करता है कुछ और क्या शब्द का उल्लेख करता है। यह क्या है?
"स्कॉटलैंड की राजधानी" जैसी चीजों को निश्चित शब्द कहा जाता है और उन्होंने लंबे समय तक तर्कवादियों और दार्शनिकों को सिरदर्द की कोई मात्रा नहीं दी। रसेल और क्वीन ने उन्हें यह कहते हुए छांटा कि वे वास्तव में "रेफ़रेंशियल" नहीं हैं, अर्थात, यह सोचने की गलती है कि उपरोक्त उदाहरणों का उपयोग संस्थाओं को संदर्भित करने के लिए किया जाता है। "एडिनबर्ग 1999 से स्कॉटलैंड की राजधानी रही है" यह समझने का सही तरीका है
स्कॉटलैंड की राजधानी 1999 से है और यह राजधानी एडिनबर्ग है।
इस वाक्य को एक नट के रूप में नहीं बदला जा सकता है। समस्या सुलझ गयी! क्वीन का कहना था कि प्राकृतिक भाषा गड़बड़ है, या कम से कम जटिल है, क्योंकि यह व्यावहारिक उपयोग के लिए सुविधाजनक है, लेकिन दार्शनिकों और तर्कवादियों को उन्हें सही तरीके से समझकर स्पष्टता लाना चाहिए। प्रासंगिक पारदर्शिता अर्थ की ऐसी स्पष्टता लाने के लिए इस्तेमाल किया जाने वाला उपकरण है ।
प्रोग्रामिंग के साथ यह सब क्या करना है? बहुत ज्यादा नहीं, वास्तव में। जैसा कि हमने कहा, रेफ़रेन्शियल ट्रांसपेरेंसी एक उपकरण है जिसका उपयोग भाषा को समझने में किया जाता है, अर्थात, अर्थ प्रदान करने में । क्रिस्टोफर स्ट्रेची , जिन्होंने प्रोग्रामिंग भाषा शब्दार्थ के क्षेत्र की स्थापना की, ने अपने अर्थ के अध्ययन में इसका इस्तेमाल किया। उनका संस्थापक पत्र " प्रोग्रामिंग भाषाओं में मौलिक अवधारणा " वेब पर उपलब्ध है। यह एक सुंदर कागज है और हर कोई इसे पढ़ और समझ सकता है। तो, कृपया ऐसा करें। आप बहुत प्रबुद्ध होंगे। उन्होंने इस अनुच्छेद में "संदर्भात्मक पारदर्शिता" शब्द का परिचय दिया:
अभिव्यक्ति के सबसे उपयोगी गुणों में से एक यह है कि क्वीन रेफ़रेंशियल पारदर्शिता द्वारा कहा जाता है। संक्षेप में इसका मतलब यह है कि यदि हम एक अभिव्यक्ति के मूल्य को समझना चाहते हैं जिसमें एक उप-अभिव्यक्ति शामिल है, तो केवल एक चीज जो हमें उप-अभिव्यक्ति के बारे में जानने की जरूरत है, वह है इसका मूल्य। उप-अभिव्यक्ति की कोई अन्य विशेषताएं, जैसे इसकी आंतरिक संरचना, इसके घटकों की संख्या और प्रकृति, जिस क्रम में उनका मूल्यांकन किया जाता है या स्याही का रंग जिसमें वे लिखे जाते हैं, मुख्य के मूल्य के लिए अप्रासंगिक हैं अभिव्यक्ति।
"संक्षेप में" का उपयोग यह बताता है कि स्ट्रेची इसे सरल शब्दों में समझाने के लिए इसे पैराफ़्रेस्स कर रहा है। कार्यात्मक प्रोग्रामर इस पैराग्राफ को अपने तरीके से समझने लगते हैं। कागज में "संदर्भात्मक पारदर्शिता" की 9 अन्य घटनाएं हैं, लेकिन वे दूसरों में से किसी के बारे में परेशान नहीं लगते हैं। वास्तव में, स्ट्रैची का पूरा पेपर अनिवार्य प्रोग्रामिंग भाषाओं के अर्थ को समझाने के लिए समर्पित है । लेकिन, आज, कार्यात्मक प्रोग्रामर का दावा है कि अनिवार्य प्रोग्रामिंग भाषाएं प्रासंगिक रूप से पारदर्शी नहीं हैं । स्ट्रैची उसकी कब्र में बदल जाएगा।
हम स्थिति को उबार सकते हैं। हमने कहा कि प्राकृतिक भाषा "गन्दा, या कम से कम जटिल है" क्योंकि यह व्यावहारिक उपयोग के लिए सुविधाजनक है। प्रोग्रामिंग लैंग्वेज उसी तरह हैं। वे "गन्दा, या कम से कम जटिल हैं" क्योंकि उन्हें व्यावहारिक उपयोग के लिए सुविधाजनक बनाया जाता है। इसका मतलब यह नहीं है कि उन्हें हमें भ्रमित करने की आवश्यकता है। उन्हें बस सही तरीके से समझा जाना चाहिए, एक मेटा भाषा का उपयोग करना जो संदर्भात्मक रूप से पारदर्शी है ताकि हमारे पास अर्थ की स्पष्टता हो। जिस पेपर में मैंने उद्धृत किया, स्ट्रैची ठीक यही करता है। वह अनिवार्य प्रोग्रामिंग भाषाओं के अर्थ को प्रारंभिक अवधारणाओं में तोड़कर स्पष्ट करता है, कहीं भी स्पष्टता नहीं खोता है। उनके विश्लेषण का एक महत्वपूर्ण हिस्सा यह बताना है कि प्रोग्रामिंग भाषाओं में अभिव्यक्ति के दो प्रकार "मूल्य" होते हैं:r- मान । स्ट्रैची के कागज से पहले, यह समझ में नहीं आया और भ्रम ने सर्वोच्च शासन किया। आज, C की परिभाषा इसे नियमित रूप से बताती है और हर C प्रोग्रामर भेद को समझता है। (क्या अन्य भाषाओं में प्रोग्रामर इसे समान रूप से अच्छी तरह समझते हैं, यह कहना मुश्किल है।)
क्वीन और स्ट्रैची दोनों ही भाषा निर्माण के अर्थ से चिंतित थे जिसमें कुछ प्रकार के संदर्भ-निर्भरता शामिल थे। उदाहरण के लिए, हमारा उदाहरण "एडिनबर्ग 1999 से स्कॉटलैंड की राजधानी रहा है" इस तथ्य को दर्शाता है कि "स्कॉटलैंड की राजधानी" उस समय पर निर्भर करती है जिस पर विचार किया जा रहा है। ऐसी संदर्भ-निर्भरता एक वास्तविकता है, जो प्राकृतिक भाषाओं और प्रोग्रामिंग भाषाओं दोनों में है। यहां तक कि कार्यात्मक प्रोग्रामिंग में, स्वतंत्र और बाध्य चर को उस संदर्भ के संबंध में व्याख्या की जानी चाहिए जिसमें वे दिखाई देते हैं। किसी भी तरह के संदर्भों की संदर्भ निर्भरता किसी तरह से प्रासंगिक पारदर्शिता। यदि आप उन संदर्भों के संबंध में बिना शब्दों के अर्थ को समझने की कोशिश करते हैं, जिन पर वे निर्भर होते हैं, तो आप फिर से भ्रम के साथ समाप्त हो जाएंगे। क्वीन मोडल लॉजिक के अर्थ से चिंतित था। वह आयोजित कियामोडल तर्क संदर्भित रूप से अपारदर्शी था और इसे संदर्भात्मक रूप से पारदर्शी ढांचे में अनुवाद करके साफ किया जाना चाहिए (उदाहरणार्थ, आवश्यकता के संबंध में)। वह काफी हद तक यह बहस हार गए। तर्कवादियों और दार्शनिकों ने समान रूप से क्रिपके के संभावित विश्व शब्दार्थ को पूरी तरह से पर्याप्त पाया। इसी तरह की स्थिति अनिवार्य प्रोग्रामिंग के साथ भी शासन करती है। स्ट्रेची द्वारा समझाया गया राज्य-निर्भरता और रेनॉल्ड्स द्वारा समझाया गया स्टोर-निर्भरता (कृपके के संभावित विश्व शब्दार्थ के समान तरीके से) पूरी तरह से पर्याप्त हैं। कार्यात्मक प्रोग्रामर इस शोध के बारे में ज्यादा नहीं जानते हैं। संदर्भात्मक पारदर्शिता पर उनके विचारों को नमक के एक बड़े अनाज के साथ लिया जाना है।
[अतिरिक्त नोट: ऊपर दिए गए उदाहरण बताते हैं कि एक साधारण वाक्यांश जैसे "स्कॉटलैंड की राजधानी" के कई स्तर हैं। एक स्तर पर, हम मौजूदा समय में पूंजी के बारे में बात कर रहे होंगे। दूसरे स्तर पर, हम उन सभी संभावित राजधानियों के बारे में बात कर सकते हैं जो स्कॉटलैंड के समय के दौरान हो सकती थीं। हम सामान्य संदर्भ में काफी आसानी से सभी संदर्भों को प्राप्त करने के लिए "एक विशेष संदर्भ में ज़ूम" और "ज़ूम आउट" कर सकते हैं। प्राकृतिक भाषा की दक्षता ऐसा करने की हमारी क्षमता का उपयोग करती है। इंपीरियल प्रोग्रामिंग लैंग्वेज उसी तरह से बहुत कुशल हैं। हम एक विशेष स्थिति में इसके मूल्य के बारे में बात करने के लिए एक असाइनमेंट (राइट -वैल्यू ) के दाईं ओर एक चर x का उपयोग कर सकते हैं । या, हम इसके एल-मूल्य के बारे में बात कर सकते हैंजो सभी राज्यों में फैला हुआ है। ऐसी बातों से लोग शायद ही भ्रमित होते हैं। हालाँकि, वे भाषा निर्माणों में निहित अर्थ की सभी परतों की ठीक-ठीक व्याख्या करने में सक्षम हो भी सकते हैं और नहीं भी। अर्थ की ऐसी सभी परतें आवश्यक रूप से 'स्पष्ट' नहीं हैं और उनका सही ढंग से अध्ययन करना विज्ञान की बात है। हालांकि, ऐसे स्तरित अर्थों को समझाने के लिए आम लोगों की निष्पक्षता का मतलब यह नहीं है कि वे उनके बारे में भ्रमित हैं।]
नीचे एक अलग "पोस्टस्क्रिप्ट" इस चर्चा को कार्यात्मक और अनिवार्य प्रोग्रामिंग की चिंताओं से संबंधित करता है ।
रेफ़रेंशियल ट्रांसपेरेंसी, आमतौर पर फ़ंक्शनल प्रोग्रामिंग में इस्तेमाल किया जाने वाला शब्द है, जिसका अर्थ है कि एक फंक्शन और एक इनपुट वैल्यू दिया जाता है, आपको हमेशा एक ही आउटपुट प्राप्त होगा। कहने का मतलब यह है कि फंक्शन में किसी बाहरी राज्य का इस्तेमाल नहीं किया जाता है।
यहाँ एक संदर्भित पारदर्शी समारोह का एक उदाहरण है:
int plusOne(int x)
{
return x+1;
}
एक संदर्भात्मक पारदर्शी फ़ंक्शन के साथ, एक इनपुट और एक फ़ंक्शन को देखते हुए, आप फ़ंक्शन को कॉल करने के बजाय इसे एक मूल्य के साथ बदल सकते हैं। इसलिए 5 के एक पैरामीटर के साथ plusOne को कॉल करने के बजाय, हम इसे 6 के साथ बदल सकते हैं।
एक और अच्छा उदाहरण सामान्य रूप से गणित है। गणित में एक फ़ंक्शन और एक इनपुट मूल्य दिया गया है, यह हमेशा एक ही आउटपुट मूल्य पर मैप करेगा। f (x) = x + 1. इसलिए गणित में कार्य संदर्भित रूप से पारदर्शी होते हैं।
यह अवधारणा शोधकर्ताओं के लिए महत्वपूर्ण है क्योंकि इसका मतलब है कि जब आपके पास एक संदर्भित पारदर्शी फ़ंक्शन होता है, तो यह आसान स्वचालित समानांतरकरण और कैशिंग के लिए उधार देता है।
हस्केल जैसी कार्यात्मक भाषाओं में हमेशा प्रासंगिक पारदर्शिता का उपयोग किया जाता है।
-
इसके विपरीत संदर्भात्मक अपारदर्शिता की अवधारणा है। इसका अर्थ है विपरीत। फ़ंक्शन को कॉल करना हमेशा एक ही आउटपुट का उत्पादन नहीं कर सकता है।
//global G
int G = 10;
int plusG(int x)
{//G can be modified externally returning different values.
return x + G;
}
एक अन्य उदाहरण, वस्तु उन्मुख प्रोग्रामिंग भाषा में एक सदस्य कार्य है। सदस्य फ़ंक्शंस आमतौर पर इसके सदस्य चर पर काम करते हैं और इसलिए संदर्भात्मक अपारदर्शी होंगे। सदस्य कार्य हालांकि निश्चित रूप से पारदर्शी रूप से पारदर्शी हो सकते हैं।
फिर भी एक अन्य उदाहरण एक फ़ंक्शन है जो पाठ फ़ाइल से पढ़ता है और आउटपुट प्रिंट करता है। यह बाहरी पाठ फ़ाइल किसी भी समय बदल सकती है, इसलिए फ़ंक्शन संदर्भित रूप से अपारदर्शी होगा।
एक संदर्भित पारदर्शी फ़ंक्शन वह है जो केवल उसके इनपुट पर निर्भर करता है।
[यह कार्यात्मक / अनिवार्य प्रोग्रामिंग की चिंताओं के करीब चर्चा को लाने के प्रयास में, 25 मार्च से मेरे उत्तर की एक पोस्टस्क्रिप्ट है।]
संदर्भात्मक पारदर्शिता के कार्यात्मक प्रोग्रामर का विचार तीन तरीकों से मानक धारणा से भिन्न प्रतीत होता है:
जबकि दार्शनिक / तर्कशास्त्री "संदर्भ", " डिनोटेशन ", " डिज़ाइनटम " और " बेडियटुंग " ( फ्रीज जर्मन शब्द) जैसे शब्दों का उपयोग करते हैं , कार्यात्मक प्रोग्रामर "मूल्य" शब्द का उपयोग करते हैं। (यह पूरी तरह से उनका काम नहीं है। मेरा ध्यान है कि लैंडिन, स्ट्रैची और उनके वंशजों ने भी संदर्भ / मूल्य के बारे में बात करने के लिए "मूल्य" शब्द का इस्तेमाल किया। यह सिर्फ एक शब्दावली का सरलीकरण हो सकता है जिसे लैंडिन और स्ट्रेची ने पेश किया था, लेकिन यह एक ऐसा लगता है। भोली तरीके से इस्तेमाल किए जाने पर बड़ा अंतर।)
कार्यात्मक प्रोग्रामर यह मानते हैं कि ये "मूल्य" प्रोग्रामिंग भाषा के भीतर मौजूद हैं, न कि बाहर। ऐसा करने में, वे दार्शनिक और प्रोग्रामिंग भाषा के अर्थशास्त्री दोनों से अलग हैं।
वे मानते हैं कि इन "मूल्यों" को मूल्यांकन द्वारा प्राप्त किया जाना चाहिए।
उदाहरण के लिए, संदर्भात्मक पारदर्शिता पर विकिपीडिया लेख कहता है, आज सुबह:
एक अभिव्यक्ति को संदर्भात्मक रूप से पारदर्शी कहा जाता है यदि इसे प्रोग्राम के व्यवहार को बदलने के बिना इसके मूल्य के साथ बदला जा सकता है (दूसरे शब्दों में, एक प्रोग्राम जो उसी इनपुट पर समान प्रभाव और आउटपुट देता है)।
यह पूरी तरह से विचरण पर है कि दार्शनिक / तर्कशास्त्री क्या कहते हैं। वे कहते हैं कि एक संदर्भ संदर्भित या संदर्भात्मक रूप से पारदर्शी है यदि उस संदर्भ में एक अभिव्यक्ति को दूसरी अभिव्यक्ति द्वारा प्रतिस्थापित किया जा सकता है जो एक ही चीज़ (एक मूल अभिव्यक्ति) को संदर्भित करता है । ये दार्शनिक / तर्कवादी कौन हैं? इनमें फ्रीज , रसेल , व्हाइटहेड , कार्नाप , क्वीन , चर्च शामिल हैंऔर अनगिनत अन्य। उनमें से हर एक एक विशाल आंकड़ा है। इन तर्कवादियों की संयुक्त बौद्धिक शक्ति कम से कम कहने के लिए पृथ्वी-बिखर रही है। वे सभी इस स्थिति में एकमत हैं कि औपचारिक भाषा के बाहर संदर्भ / संप्रदाय मौजूद हैं और भाषा के भीतर के भाव ही उनके बारे में बात कर सकते हैं। तो, भाषा के भीतर जो कुछ भी हो सकता है वह है कि एक अभिव्यक्ति को एक और अभिव्यक्ति द्वारा प्रतिस्थापित किया जाए जो एक ही इकाई को संदर्भित करता है। संदर्भ / संप्रदाय स्वयं भाषा के भीतर मौजूद नहीं हैं। कार्यात्मक प्रोग्रामर इस अच्छी तरह से स्थापित परंपरा से विचलित क्यों होते हैं?
कोई यह मान सकता है कि प्रोग्रामिंग भाषा के अर्थशास्त्री उन्हें गुमराह कर सकते हैं। लेकिन, उन्होंने ऐसा नहीं किया।
लैंडिन :
(ए) प्रत्येक अभिव्यक्ति में एक घोंसले का शिकार उपप्रकार संरचना है, (बी) प्रत्येक उपप्रकारक कुछ को दर्शाता है (आमतौर पर एक संख्या, सत्य मूल्य या संख्यात्मक कार्य) , (ग) जिस चीज को एक अभिव्यक्ति निरूपित करता है, अर्थात, इसका "मूल्य", केवल पर निर्भर करता है इसके उप-भावों के मूल्य, उनमें से अन्य गुणों पर नहीं। [जोड़ा गया जोर]
Stoy :
केवल एक चीज जो एक अभिव्यक्ति के बारे में मायने रखती है, वह है इसका मूल्य, और किसी भी उपसंचाई को मूल्य [जोड़ा गया जोर] में किसी अन्य के बराबर बदला जा सकता है । इसके अलावा, एक अभिव्यक्ति का मूल्य कुछ सीमाओं के भीतर होता है, जब भी ऐसा होता है "।
एक अभिव्यक्ति का मूल्य केवल उसके घटक अभिव्यक्तियों (यदि कोई हो) के मूल्यों पर निर्भर करता है और इन उप-संदर्भों को समान मूल्य [जोड़ा गया जोर] वाले अन्य लोगों द्वारा स्वतंत्र रूप से प्रतिस्थापित किया जा सकता है ।
इसलिए, पूर्वव्यापीकरण में, "संदर्भ" / "मूल्य" के साथ "मूल्य" के स्थान पर शब्दावली को सरल बनाने के लिए लैंडिन और स्ट्रैची के प्रयासों को चोट पहुंचाई गई हो सकती है। जैसे ही कोई "मूल्य" सुनता है, एक मूल्यांकन प्रक्रिया के बारे में सोचने का प्रलोभन होता है जो इसे आगे बढ़ाता है। मूल्यांकन के "मूल्य" के रूप में जो कुछ भी उत्पन्न होता है, यह सोचना भी उतना ही लुभावना है, हालांकि यह काफी स्पष्ट हो सकता है कि यह नकार नहीं है। यही मैं इकट्ठा करता हूं कि कार्यात्मक प्रोग्रामर की नजर में "रेफरेंशियल ट्रांसपेरेंसी" की अवधारणा को हुआ है। लेकिन प्रारंभिक अर्थवादियों द्वारा जिस "मूल्य" की बात की जा रही थी, वह किसी मूल्यांकन या किसी फ़ंक्शन या ऐसी किसी चीज़ के आउटपुट का परिणाम नहीं है। यह शब्द का अर्थ है।
एक बार जब हम एक जटिल गणितीय / वैचारिक वस्तु के रूप में एक अभिव्यक्ति ("संदर्भ" या शास्त्रीय दार्शनिकों के प्रवचन में "मूल्य") के तथाकथित "मूल्य" को समझते हैं, तो सभी प्रकार की संभावनाएं खुल जाती हैं।
कार्यात्मक प्रोग्रामर्स की अनिच्छा ऐसी भाषाओं को "संदर्भात्मक रूप से पारदर्शी" कहने का तात्पर्य केवल यह है कि वे ऐसे जटिल गणितीय / वैचारिक वस्तुओं को "मूल्यों" के रूप में स्वीकार करने के लिए अनिच्छुक हैं। दूसरी ओर, वे एक राज्य ट्रांसफार्मर को "मान" कहने के लिए पूरी तरह से तैयार दिखते हैं, जब इसे अपने पसंदीदा सिंटैक्स में डाला जाता है और "मोनड" जैसे भद्दे शब्द के साथ तैयार किया जाता है। मेरा कहना है कि वे पूरी तरह से असंगत हो रहे हैं, भले ही हम उन्हें यह अनुदान दें कि उनके विचार से "संदर्भगत पारदर्शिता" में कुछ सामंजस्य है।
इन भ्रमों के अस्तित्व में आने पर थोड़ा इतिहास कुछ प्रकाश डाल सकता है। 1962 से 1967 के बीच की अवधि क्रिस्टोफर स्ट्रेची के लिए बहुत ही गहन थी। 1962-65 के बीच, उन्होंने मौरिस विल्क्स के साथ अनुसंधान सहायक के रूप में अंशकालिक नौकरी ली, जिसे सीपीएल के रूप में जाना जाने वाली प्रोग्रामिंग भाषा को डिजाइन और कार्यान्वित करने के लिए। यह एक अनिवार्य प्रोग्रामिंग भाषा थी लेकिन शक्तिशाली कार्यात्मक प्रोग्रामिंग भाषा क्षमताओं के रूप में अच्छी तरह से थी। लैंडिन, जो अपनी कंसल्टेंसी कंपनी में स्ट्रैची के कर्मचारी थे, ने प्रोग्रामिंग भाषाओं के स्ट्रैची के दृष्टिकोण पर बहुत प्रभाव डाला। लैंडमार्क 1965 के पेपर " नेक्स्ट 700 प्रोग्रामिंग लैंग्वेजेस " में, लैंडिन ने अनएब्सेम्डली फंक्शनल प्रोग्रामिंग लैंग्वेज को बढ़ावा दिया (उन्हें डिमोनेटिव कहते हुएभाषाएं) और अनिवार्य प्रोग्रामिंग भाषाओं को उनके "एंटीथिसिस" के रूप में वर्णित करती हैं। आगामी चर्चा में, हम स्ट्रेची को लैंडिन की मजबूत स्थिति पर संदेह उठाते हुए पाते हैं।
... डीएल सभी भाषाओं का एक सबसेट बनाते हैं। वे एक दिलचस्प उपसमुच्चय हैं, लेकिन एक का उपयोग करने के लिए असुविधाजनक है जब तक आप इसके लिए उपयोग नहीं किए जाते हैं। हमें इनकी आवश्यकता है क्योंकि इस समय हमें यह नहीं पता कि भाषाओं के साथ प्रमाणों का निर्माण कैसे किया जाए जिसमें अनिवार्यताएँ और छलांग शामिल हैं। [जोड़ा गया जोर]
1965 में, स्ट्रैची ने ऑक्सफोर्ड में एक पाठक का पद ग्रहण किया और लगता है कि अनिवार्य रूप से अनिवार्य रूप से अनिवार्य रूप से पूर्णकालिक और जंपर्स के सिद्धांत को विकसित करने पर काम किया है। 1967 तक, वह एक सिद्धांत के साथ तैयार थे, जो उन्होंने कोपेनहेगन ग्रीष्मकालीन स्कूल में " प्रोग्रामिंग भाषाओं में मौलिक अवधारणाओं " पर अपने पाठ्यक्रम में पढ़ाया था । व्याख्यान के नोट्स प्रकाशित होने चाहिए थे, लेकिन "दुर्भाग्य से, परिश्रम के संपादन के कारण, कार्यवाही कभी भी सफल नहीं हुई, जैसे ऑक्सफोर्ड में स्ट्रैची के बहुत से काम, हालांकि, कागज का एक प्रभावशाली निजी प्रचलन था।" ( मार्टिन कैंपबेल-केली )
स्ट्रैची के लेखन को प्राप्त करने की कठिनाई के कारण भ्रम फैल सकता है, लोग द्वितीयक स्रोतों और हार्स पर भरोसा करते हैं। लेकिन, अब जब " मौलिक अवधारणाएं " वेब पर आसानी से उपलब्ध हैं, तो काम का अनुमान लगाने के लिए सहारा लेने की आवश्यकता नहीं है। हमें इसे पढ़ना चाहिए और स्ट्रैची का मतलब के रूप में अपना मन बनाना चाहिए। विशेष रूप से:
एल-मान, आर-मान और अन्य जटिल वस्तुओं के बीच अंतर को समझने के बिना "संदर्भात्मक पारदर्शिता" की कोई भी बात जो अनिवार्य प्रोग्रामर के वैचारिक ब्रह्मांड को पॉपुलेट करती है, मौलिक रूप से गलत है।
संक्षिप्त स्पष्टीकरण की आवश्यकता वाले लोगों के लिए मैं एक को खतरा होगा (लेकिन नीचे दिए गए प्रकटीकरण को पढ़ें)।
एक प्रोग्रामिंग लैंग्वेज में रेफ़रेंशियल ट्रांसपेरेंसी, इक्विशनल रीज़निंग को बढ़ावा देती है - जितना रेफ़रेंशियल ट्रांसपेरेंसी आपके पास है, उतना ही आसान है, इक्विशनल रीज़निंग करना। जैसे (छद्म) फ़ंक्शन परिभाषा के साथ,
fx = x + x,
इस परिभाषा के दायरे में आप आसानी (foo) को foo + foo से बदल सकते हैं, जिस पर आप इस कमी को पूरा नहीं कर सकते हैं, उस आसानी से आप कितनी आसानी से अपनी प्रोग्रामिंग भाषा को कितनी संदर्भात्मक पारदर्शिता का संकेत दे सकते हैं है।
उदाहरण के लिए यदि f प्रोग्रामिंग प्रोग्राम में C ++ में x ++ थे, तो आप इस कमी को सुरक्षित रूप से नहीं निभा सकते थे (जो कहना है, यदि आप इस कमी को पूरा करने के लिए थे, तो आप उसी प्रोग्राम के साथ समाप्त नहीं होंगे जो आपने शुरू किया था)।
व्यावहारिक प्रोग्रामिंग भाषाओं में आप सही संदर्भात्मक पारदर्शिता नहीं देखेंगे लेकिन कार्यात्मक प्रोग्रामर इसकी सबसे अधिक परवाह करते हैं (सीएफ हास्केल, जहां यह एक मुख्य उद्देश्य है)।
(पूर्ण प्रकटीकरण: मैं एक कार्यात्मक प्रोग्रामर हूं इसलिए शीर्ष उत्तर द्वारा आपको नमक के दाने के साथ यह स्पष्टीकरण लेना चाहिए।)
यदि आप व्युत्पत्ति विज्ञान में रुचि रखते हैं (अर्थात इस अवधारणा का यह विशेष नाम क्यों है), इस विषय पर मेरे ब्लॉग पोस्ट पर एक नज़र डालें । शब्दावली दार्शनिक / तर्कशास्त्री क्वीन से आती है।
1 में प्रश्न में दो भाषाओं की स्पष्टता है:
2 में, ऑब्जेक्ट और मेटलंगेज की निकटता के लिए धन्यवाद, उन्हें भ्रमित किया जा सकता है।
भाषा कार्यान्वयनकर्ता के रूप में, मुझे लगता है कि मुझे इस अंतर को लगातार याद रखने की आवश्यकता है।
तो प्रो। रेड्डी क्या मैं आपको इस तरह मना सकता हूं :-)
कार्यात्मक प्रोग्रामिंग और शब्दार्थ के संदर्भों में, रेफ़रेंशियल ट्रांसपेरेंसी शब्द प्रासंगिक रूप से पारदर्शी नहीं है।
निम्नलिखित उत्तर मुझे आशा है कि विवादास्पद 1 और 3 उत्तर को जोड़ता है और योग्य है।
आइए हम बताएं कि कोई अभिव्यक्ति किसी संदर्भ को दर्शाता है या संदर्भित करता है। हालांकि, एक सवाल यह है कि क्या इन संदर्भों को अभिव्यक्तियों के हिस्से के रूप में समसामयिक रूप से इनकोड किया जा सकता है, ऐसे भावों को 'मूल्य' कहते हैं। उदाहरण के लिए, शाब्दिक संख्या मान अंकगणितीय अभिव्यक्तियों के समुच्चय का एक उपसमुच्चय है, सत्य मान बूलियन अभिव्यक्तियों के समुच्चय का एक उपसमुच्चय है, आदि। विचार एक अभिव्यक्ति का उसके मूल्य (यदि यह है) का मूल्यांकन करने के लिए है। इसलिए 'मूल्य' शब्द, एक भाव या संदर्भ के सेट के एक विशिष्ट तत्व को संदर्भित कर सकता है। लेकिन यदि संदर्भ और मूल्य के बीच एक समरूपता (एक आक्षेप) है तो हम कह सकते हैं कि वे एक ही चीज हैं। (यह कहा गया है, एक व्यक्ति को संदर्भों और समरूपता को परिभाषित करने के लिए सावधान रहना चाहिए, जैसा कि प्रतीयमान अर्थविज्ञान के क्षेत्र द्वारा सिद्ध किया गया है। 3 उत्तर के उत्तर द्वारा उल्लिखित उदाहरण को रखने के लिए,data Nat = Zero | Suc Nat
प्राकृतिक संख्याओं के सेट के अनुरूप नहीं है।)
E[·]
एक छिद्र के साथ एक अभिव्यक्ति के लिए लिखते हैं , जिसे कुछ तिमाहियों में 'संदर्भ' के रूप में भी जाना जाता है। C- जैसी अभिव्यक्तियों के लिए दो संदर्भ उदाहरण हैं [·]+1
और
[·]++
।
आइए हम [[·]]
उस फ़ंक्शन के लिए लिखते हैं जो एक अभिव्यक्ति लेता है (कोई छेद नहीं) और कुछ अर्थ प्रदान करने वाले ब्रह्मांड में इसके अर्थ (संदर्भ, मूल्य, आदि) को वितरित करता है। (मैं अर्थशास्त्री शब्दार्थ के क्षेत्र से संकेतन उधार ले रहा हूं)
आइए क्विन की परिभाषा को कुछ हद तक औपचारिक रूप से रूपांतरित करें: एक संदर्भ संदर्भगत रूप E[·]
से पारदर्शी है यदि किसी भी दो भाव दिए गए हैं E1
और E2
(कोई छेद नहीं है) ऐसे [[E1]] = [[E2]]
( जैसे कि भाव उसी संदर्भ को दर्शाता / संदर्भित करता है) तो यह मामला है [[E[E1]]] = [[E[E2]]]
(यानी भरना ( E1
या तो छेद के साथ या E2
अभिव्यक्ति में परिणाम है कि एक ही संदर्भ निरूपित भी)।
बराबरी के लिए बराबर प्रतिस्थापन की लीबनीज के नियम आम तौर पर 'अगर के रूप में व्यक्त किया जाता है
E1 = E2
तो E[E1] = E[E2]
' है, जो कहता है कि E[·]
एक समारोह है। एक फ़ंक्शन (या उस मामले के लिए एक प्रोग्राम जो फ़ंक्शन को कंप्यूटिंग करता है) एक स्रोत से लक्ष्य तक मैपिंग है ताकि प्रत्येक स्रोत तत्व के लिए अधिकतम एक लक्ष्य तत्व हो। गैर-नियतात्मक कार्य गलत हैं, वे या तो संबंध हैं, सेट देने वाले कार्य हैं, आदि यदि लिबनीज के नियम में समानता =
निरंकुश है, तो डबल-ब्रैकेट बस के लिए दिए जाते हैं और समाप्त हो जाते हैं। तो एक संदर्भित पारदर्शी संदर्भ एक कार्य है। और लीबनीज का नियम समतुल्य तर्क का मुख्य घटक है, इसलिए समतुल्य तर्क निश्चित रूप से संदर्भित पारदर्शिता से संबंधित है।
हालाँकि [[·]]
यह अभिव्यक्ति से लेकर निरूपण तक का एक कार्य है, लेकिन यह भावों से एक फ़ंक्शन हो सकता है जिसे 'भाव' भावों के सीमित उपसमूह के रूप में समझा जाता है, और [[·]]
इसे मूल्यांकन के रूप में समझा जा सकता है।
अब, अगर E1
एक अभिव्यक्ति है और E2
एक ऐसा मूल्य है जो हमारे पास है, जो मुझे लगता है कि ज्यादातर लोग अभिव्यक्ति, मूल्यों और मूल्यांकन के संदर्भ में प्रासंगिक पारदर्शिता को परिभाषित करते समय करते हैं। लेकिन जैसा कि इस पृष्ठ में 1 और 3 के उत्तर से स्पष्ट है, यह एक गलत परिभाषा है।
जैसे संदर्भों के साथ समस्या [·]++
साइड इफेक्ट नहीं है, लेकिन यह है कि इसके मूल्य को C isomorphically इसके अर्थ में परिभाषित नहीं किया गया है। फ़ंक्शंस मान नहीं हैं (ठीक है, कार्यों के लिए संकेत हैं) जबकि कार्यात्मक प्रोग्रामिंग भाषाओं में वे हैं। लैंडिन, स्ट्रैची, और अर्थ प्रदान करने के लिए कार्यात्मक दुनिया का उपयोग करने में निंदात्मक शब्दार्थ के अग्रणी काफी चतुर थे।
अनिवार्य सी जैसी भाषाओं के लिए हम (मोटे तौर पर) फ़ंक्शन का उपयोग करके अभिव्यक्तियों को शब्दार्थ प्रदान कर सकते हैं [[·]] : Expression -> (State -> State x Value)
।
Value
का सबसेट है Expression
। State
इसमें जोड़े (पहचानकर्ता, मूल्य) शामिल हैं। सिमेंटिक फ़ंक्शन एक अभिव्यक्ति लेता है और इसके अर्थ के रूप में वर्तमान स्थिति से जोड़े को अद्यतन स्थिति और मूल्य के साथ एक फ़ंक्शन देता है। उदाहरण के लिए, [[x]]
वर्तमान स्थिति से उस जोड़ी का कार्य है जिसका पहला घटक वर्तमान स्थिति है और जिसका दूसरा घटक x का मान है। इसके विपरीत, [[x++]]
वर्तमान स्थिति से उस जोड़ी का कार्य है जिसका पहला घटक एक ऐसा राज्य है जिसमें x का मान बढ़ा हुआ है, और जिसका दूसरा घटक वह मूल्य है। इस अर्थ में, संदर्भ [·]++
संदर्भात्मक रूप से पारदर्शी है यदि यह ऊपर दी गई परिभाषा को संतुष्ट करता है।
मुझे लगता है कि कार्यात्मक प्रोग्रामर इस संदर्भ में प्रासंगिक पारदर्शिता का उपयोग करने के हकदार हैं कि वे स्वाभाविक [[·]]
रूप से अभिव्यक्ति से मूल्यों तक एक फ़ंक्शन के रूप में पुनर्प्राप्त करते हैं। कार्य प्रथम श्रेणी के मूल्य हैं और राज्य एक मूल्य हो सकता है, न कि एक मूल्य। राज्य मोनाड (भाग में) राज्य को पारित करने (या फैलाने) के लिए एक साफ तंत्र है।
ध्यान दें कि "अर्थ" की यह अवधारणा कुछ है जो पर्यवेक्षक के दिमाग में होती है। इस प्रकार, एक ही "संदर्भ" का अर्थ अलग-अलग लोगों के लिए अलग-अलग हो सकता है। इसलिए, उदाहरण के लिए, हमारे पास विकिपीडिया में एक एडिनबर्ग वितरण पृष्ठ है।
एक संबंधित समस्या जो प्रोग्रामिंग के संदर्भ में दिखाई दे सकती है वह बहुरूपता हो सकती है।
और शायद हमारे पास बहुरूपता के विशेष मामले के लिए एक नाम होना चाहिए (या शायद कास्टिंग भी) जहां हमारे उद्देश्यों के लिए अलग-अलग बहुरूपी मामले शब्दार्थ के समान हैं (जैसा कि सिर्फ समान होने के विपरीत है। उदाहरण के लिए, संख्या 1 - का प्रतिनिधित्व किया जा सकता है। पूर्णांक प्रकार, या एक जटिल प्रकार या विभिन्न प्रकार के किसी भी प्रकार का उपयोग करके - बहुरूपता का इलाज किया जा सकता है)।
मुझे " स्ट्रक्चर एंड इम्प्लीमेंटेशन ऑफ कंप्यूटर प्रोग्राम्स " (विजार्ड बुक) उपयोगी पुस्तक में रेफरेन्शियल ट्रांसपेरेंसी की परिभाषा मिली क्योंकि यह असाइनमेंट ऑपरेशन की शुरुआत करते हुए कैसे रेफरेंशियल ट्रांसपेरेंसी का उल्लंघन किया जाता है, इसकी व्याख्या द्वारा पूरक है । निम्नलिखित स्लाइड डेक की जाँच करें मैं विषय के बारे में किए गए: https://www.slideshare.net/pjschwarz/introducing-assignment-invalidates-the-substitution-model-of-evaluation-and-violates-referential-transparency-as- समझाया-इन-sicp-जादूगर पुस्तक
प्रासंगिक पारदर्शिता को केवल इस प्रकार कहा जा सकता है:
उदाहरण के लिए, प्रोग्रामिंग भाषा हास्केल एक शुद्ध कार्यात्मक भाषा है; इसका अर्थ है कि यह संदर्भित रूप से पारदर्शी है।