संचालक साहचर्य: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Property determining how equal-precedence operators are grouped}}{{for|साहचर्य की गणितीय अवधारणा|संबंधी गुण }}
{{Short description|Property determining how equal-precedence operators are grouped}}{{for|साहचर्य की गणितीय अवधारणा|संबंधी गुण }}


[[प्रोग्रामिंग भाषा सिद्धांत]] में, एक [[ऑपरेटर (प्रोग्रामिंग)]] की सहयोगीता एक गुण है जो यह निर्धारित करती है कि संचालन के समान क्रम के ऑपरेटरों को [[ब्रैकेट (गणित)]] की अनुपस्थिति में कैसे समूहीकृत किया जाता है। यदि किसी [[ ओपेरंड |ओपेरंड]] के पहले और बाद में दोनों ऑपरेटर हैं (उदाहरण के लिए, <code>^ 3 ^</code>), और उन ऑपरेटरों की समान प्राथमिकता है, तो ऑपरेंड का उपयोग दो अलग-अलग ऑपरेशनों के लिए इनपुट के रूप में किया जा सकता है (अथार्त दो ऑपरेटरों द्वारा निरुपित दो ऑपरेशन) ऑपरेंड को किस ऑपरेशन पर प्रयुक्त करना है, इसका चुनाव ऑपरेटरों की संबद्धता से निर्धारित होता है। ऑपरेटर्स एसोसिएटिव हो सकते हैं (इसका अर्थ ऑपरेशंस को इच्छानुसार से समूहीकृत किया जा सकता है), लेफ्ट-एसोसिएटिव (इसका अर्थ ऑपरेशंस को बाईं ओर से समूहीकृत किया जाता है), राइट-एसोसिएटिव (इसका अर्थ ऑपरेशंस को दाईं ओर से समूहीकृत किया जाता है) या गैर-एसोसिएटिव (इसका अर्थ ऑपरेशंस को समूहीकृत नहीं किया जा सकता है) जंजीर अधिकांशत: क्योंकि आउटपुट प्रकार इनपुट प्रकारों के साथ असंगत होता है)। किसी ऑपरेटर की संबद्धता और प्राथमिकता प्रोग्रामिंग भाषा की परिभाषा का एक भाग है; एक ही प्रकार के ऑपरेटर के लिए अलग-अलग प्रोग्रामिंग भाषाओं में अलग-अलग संबद्धता और प्राथमिकता हो सकती है।
[[प्रोग्रामिंग भाषा सिद्धांत|प्रोग्रामिंग लैंग्वेज सिद्धांत]] में, एक [[ऑपरेटर (प्रोग्रामिंग)]] की सहयोगीता एक गुण है जो यह निर्धारित करती है कि संचालन के समान क्रम के ऑपरेटरों को [[ब्रैकेट (गणित)]] की अनुपस्थिति में कैसे समूहीकृत किया जाता है। यदि किसी [[ ओपेरंड |ओपेरंड]] के पहले और बाद में दोनों ऑपरेटर हैं (उदाहरण के लिए, <code>^ 3 ^</code>), और उन ऑपरेटरों की समान प्राथमिकता है, तब ऑपरेंड का उपयोग दो भिन्न-भिन्न ऑपरेशनों के लिए इनपुट के रूप में किया जा सकता है (अथार्त दो ऑपरेटरों द्वारा निरुपित दो ऑपरेशन) ऑपरेंड को किस ऑपरेशन पर प्रयुक्त करना है, इसका चुनाव ऑपरेटरों की संबद्धता से निर्धारित होता है। ऑपरेटर्स एसोसिएटिव हो सकते हैं (इसका अर्थ ऑपरेशंस को इच्छानुसार से समूहीकृत किया जा सकता है), लेफ्ट-एसोसिएटिव (इसका अर्थ ऑपरेशंस को बाईं ओर से समूहीकृत किया जाता है), राइट-एसोसिएटिव (इसका अर्थ ऑपरेशंस को दाईं ओर से समूहीकृत किया जाता है) या गैर-एसोसिएटिव (इसका अर्थ ऑपरेशंस को समूहीकृत नहीं किया जा सकता है) श्रृंखलित अधिकांशत: क्योंकि आउटपुट प्रकार इनपुट प्रकारों के साथ असंगत होता है)। किसी ऑपरेटर की संबद्धता और प्राथमिकता प्रोग्रामिंग लैंग्वेज की परिलैंग्वेज का एक भाग है; एक ही प्रकार के ऑपरेटर के लिए भिन्न-भिन्न प्रोग्रामिंग लैंग्वेजओं में भिन्न-भिन्न संबद्धता और प्राथमिकता हो सकती है।


अभिव्यक्ति <code>a ~ b ~ c</code> पर विचार करें। यदि ऑपरेटर ~ ने साहचर्यता छोड़ दी है, तो इस अभिव्यक्ति की व्याख्या <code>(a ~ b) ~ c</code>.के रूप में की जाएगी। यदि ऑपरेटर के पास सही साहचर्य है, तो अभिव्यक्ति की व्याख्या<code>a ~ (b ~ c)</code> के रूप में की जाएगी। यदि ऑपरेटर गैर-सहयोगी है, तो अभिव्यक्ति एक वाक्यविन्यास त्रुटि हो सकती है, या इसका कुछ विशेष अर्थ हो सकता है। कुछ गणितीय संचालकों में अंतर्निहित साहचर्यता होती है। उदाहरण के लिए, घटाव और विभाजन, जैसा कि पारंपरिक गणित नोटेशन में उपयोग किया जाता है, स्वाभाविक रूप से बाएं-सहयोगी हैं। इसके विपरीत, जोड़ और गुणा दोनों बाएँ और दाएँ साहचर्य हैं। (उदाहरण के लिए <code>(a * b) * c = a * (b * c)</code>).।
अभिव्यक्ति <code>a ~ b ~ c</code> पर विचार करें। यदि ऑपरेटर ~ ने साहचर्यता छोड़ दी है, तब इस अभिव्यक्ति की व्याख्या <code>(a ~ b) ~ c</code>.के रूप में की जाएगी। यदि ऑपरेटर के पास सही साहचर्य है, तब अभिव्यक्ति की व्याख्या<code>a ~ (b ~ c)</code> के रूप में की जाएगी। यदि ऑपरेटर गैर-सहयोगी है, तब अभिव्यक्ति एक वाक्यविन्यास त्रुटि हो सकती है, या इसका कुछ विशेष अर्थ हो सकता है। कुछ गणितीय संचालकों में अंतर्निहित साहचर्यता होती है। उदाहरण के लिए, घटाव और विभाजन, जैसा कि पारंपरिक गणित नोटेशन में उपयोग किया जाता है, स्वाभाविक रूप से बाएं-सहयोगी हैं। इसके विपरीत, जोड़ और गुणा दोनों बाएँ और दाएँ साहचर्य हैं। (उदाहरण के लिए <code>(a * b) * c = a * (b * c)</code>).।


कई प्रोग्रामिंग भाषा मैनुअल ऑपरेटर प्राथमिकता और सहयोगीता की एक तालिका प्रदान करते हैं; उदाहरण के लिए, C और C++ के लिए तालिका देखें।
अनेक प्रोग्रामिंग लैंग्वेज मैनुअल ऑपरेटर प्राथमिकता और सहयोगीता की एक तालिका प्रदान करते हैं; उदाहरण के लिए, C और C++ के लिए तालिका देखें।


यहां वर्णित सांकेतिक साहचर्य की अवधारणा गणितीय साहचर्यता से संबंधित है, किंतु उससे भिन्न है। एक ऑपरेशन जो गणितीय रूप से सहयोगी है, परिभाषा के अनुसार किसी नोटेशनल सहयोगीता की आवश्यकता नहीं है। (उदाहरण के लिए, जोड़ में साहचर्य गुण होता है, इसलिए इसका बायां साहचर्य या दायां साहचर्य होना जरूरी नहीं है।) एक ऑपरेशन जो गणितीय रूप से साहचर्य नहीं है, चूँकि, सांकेतिक रूप से बाएं-, दाएं- या गैर-सहयोगी होना चाहिए। (उदाहरण के लिए, घटाव में साहचर्य गुण नहीं होता है, इसलिए इसमें सांकेतिक साहचर्य होना चाहिए।)
यहां वर्णित सांकेतिक साहचर्य की अवधारणा गणितीय साहचर्यता से संबंधित है, किंतु उससे भिन्न है। एक ऑपरेशन जो गणितीय रूप से सहयोगी है, परिलैंग्वेज के अनुसार किसी नोटेशनल सहयोगीता की आवश्यकता नहीं है। (उदाहरण के लिए, जोड़ में साहचर्य गुण होता है, इसलिए इसका बायां साहचर्य या दायां साहचर्य होना जरूरी नहीं है।) एक ऑपरेशन जो गणितीय रूप से साहचर्य नहीं है, चूँकि, सांकेतिक रूप से बाएं-, दाएं- या गैर-सहयोगी होना चाहिए। (उदाहरण के लिए, घटाव में साहचर्य गुण नहीं होता है, इसलिए इसमें सांकेतिक साहचर्य होना चाहिए।)


== उदाहरण                                                                                                                              ==
== उदाहरण                                                                                                                              ==
Line 31: Line 31:
#मूल्यांकन पार्स ट्री से एक स्तर ऊपर इस प्रकार जारी है: : 4{{sup|9}} = {{formatnum:262144}}.पुनः, परिणाम अभिव्यक्ति शाखा को पहले <code>^</code>के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है।
#मूल्यांकन पार्स ट्री से एक स्तर ऊपर इस प्रकार जारी है: : 4{{sup|9}} = {{formatnum:262144}}.पुनः, परिणाम अभिव्यक्ति शाखा को पहले <code>^</code>के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है।
#फिर से, मूल्यांकनकर्ता पेड़ को मूल अभिव्यक्ति तक ले जाता है और इस प्रकार मूल्यांकन करता है: 5{{sup|262144}} ≈ {{val|6.2060699|e=183230}}. अंतिम शेष शाखा नष्ट हो जाती है और परिणाम समग्र परिणाम बन जाता है, जिससे समग्र मूल्यांकन पूरा हो जाता है।
#फिर से, मूल्यांकनकर्ता पेड़ को मूल अभिव्यक्ति तक ले जाता है और इस प्रकार मूल्यांकन करता है: 5{{sup|262144}} ≈ {{val|6.2060699|e=183230}}. अंतिम शेष शाखा नष्ट हो जाती है और परिणाम समग्र परिणाम बन जाता है, जिससे समग्र मूल्यांकन पूरा हो जाता है।
एक बाएं-साहचर्य मूल्यांकन के परिणामस्वरूप पार्स ट्री <code>((5^4)^3)^2</code> और पूरी तरह से अलग परिणाम (625{{sup|3}}){{sup|2}} = {{formatnum:244140625}}{{sup|2}} ≈ {{val|5.9604645|e=16}}. होता है।
एक बाएं-साहचर्य मूल्यांकन के परिणामस्वरूप पार्स ट्री <code>((5^4)^3)^2</code> और पूरी तरह से भिन्न परिणाम (625{{sup|3}}){{sup|2}} = {{formatnum:244140625}}{{sup|2}} ≈ {{val|5.9604645|e=16}}. होता है।


== [[असाइनमेंट ऑपरेटर]] की सही-सहयोगिता                                                                                                  ==
== [[असाइनमेंट ऑपरेटर]] की सही-सहयोगिता                                                                                                  ==


कई [[अनिवार्य प्रोग्रामिंग भाषा]]ओं में, असाइनमेंट ऑपरेटर को राइट-एसोसिएटिव के रूप में परिभाषित किया गया है, और असाइनमेंट को एक अभिव्यक्ति (जो एक मूल्य का मूल्यांकन करता है) के रूप में परिभाषित किया गया है, और न कि केवल एक कथन के रूप में यह एक असाइनमेंट एक्सप्रेशन के मान को अगले असाइनमेंट एक्सप्रेशन के सही ऑपरेंड के रूप में उपयोग करके असाइनमेंट (कंप्यूटर विज्ञान) या श्रृंखलाबद्ध असाइनमेंट की अनुमति देता है।
अनेक [[अनिवार्य प्रोग्रामिंग भाषा|अनिवार्य प्रोग्रामिंग लैंग्वेजों]] में, असाइनमेंट ऑपरेटर को राइट-एसोसिएटिव के रूप में परिभाषित किया गया है, और असाइनमेंट को एक अभिव्यक्ति (जो एक मूल्य का मूल्यांकन करता है) के रूप में परिभाषित किया गया है, और न कि केवल एक कथन के रूप में यह एक असाइनमेंट एक्सप्रेशन के मान को अगले असाइनमेंट एक्सप्रेशन के सही ऑपरेंड के रूप में उपयोग करके असाइनमेंट (कंप्यूटर विज्ञान) या श्रृंखलाबद्ध असाइनमेंट की अनुमति देता है।


सी में, असाइनमेंट<code>a = b</code> एक अभिव्यक्ति है जो उसी मूल्य का मूल्यांकन करती है जैसे अभिव्यक्ति <code>b</code> को <code>a</code> के प्रकार में परिवर्तित किया जाता है, <code>b</code> के आर-मान को <code>a</code>के एल-मान में संग्रहीत करने के साइड इफेक्ट के साथ<code>a</code> {{efn|1=An expression can be made into a [[Statement (programming)|statement]] by following it with a semicolon; i.e. <code>a = b</code> is an expression but <code>a = b;</code> is a statement.}} इसलिए अभिव्यक्ति <code>a = (b = c)</code>की व्याख्या <code>b = c; a = c;</code> के रूप में की जा सकती है; वैकल्पिक अभिव्यक्ति <code>(a = b) = c</code> एक त्रुटि उत्पन्न करती है क्योंकि <code>a = b</code> एक एल-मान अभिव्यक्ति नहीं है, अथार्त इसमें आर-मान है किंतु एल-मान नहीं है जहां <code>c</code>के आर-मान को स्टोर करना है। <code>=</code> ऑपरेटर की सही-सहयोगिता <code>a = b = c</code>जैसी अभिव्यक्तियों को<code>a = (b = c)</code> के रूप में व्याख्या करने की अनुमति देती है।
सी में, असाइनमेंट<code>a = b</code> एक अभिव्यक्ति है जो उसी मूल्य का मूल्यांकन करती है जैसे अभिव्यक्ति <code>b</code> को <code>a</code> के प्रकार में परिवर्तित किया जाता है, <code>b</code> के आर-मान को <code>a</code>के L-मान में संग्रहीत करने के साइड इफेक्ट के साथ<code>a</code> {{efn|1=An expression can be made into a [[Statement (programming)|statement]] by following it with a semicolon; i.e. <code>a = b</code> is an expression but <code>a = b;</code> is a statement.}} इसलिए अभिव्यक्ति <code>a = (b = c)</code>की व्याख्या <code>b = c; a = c;</code> के रूप में की जा सकती है; वैकल्पिक अभिव्यक्ति <code>(a = b) = c</code> एक त्रुटि उत्पन्न करती है क्योंकि <code>a = b</code> एक L-मान अभिव्यक्ति नहीं है, अथार्त इसमें आर-मान है किंतु L-मान नहीं है जहां <code>c</code>के आर-मान को स्टोर करना है। <code>=</code> ऑपरेटर की सही-सहयोगिता <code>a = b = c</code>जैसी अभिव्यक्तियों को<code>a = (b = c)</code> के रूप में व्याख्या करने की अनुमति देती है।


C++ में, असाइनमेंट <code>a = b</code> एक अभिव्यक्ति है जो अभिव्यक्ति<code>a</code> के समान मान का मूल्यांकन करती है, जिसमें <code>b</code> के R-मान को <code>a</code>. के L-मान में संग्रहीत करने का दुष्प्रभाव होता है। इसलिए अभिव्यक्ति <code>a = (b = c)</code> की व्याख्या अभी भी<code>b = c; a = c;</code>. के रूप में की जा सकती है; और वैकल्पिक अभिव्यक्ति<code>(a = b) = c</code> की व्याख्या <code>a = b;</code> के रूप में की जा सकती है; <code>a = c;</code>एक त्रुटि उत्पन्न करने के अतिरिक्त <code>=</code> ऑपरेटर की सही-सहयोगिता <code>a = b = c</code> जैसी अभिव्यक्तियों को <code>a = (b = c)</code>के रूप में व्याख्या करने की अनुमति देती है।
C++ में, असाइनमेंट <code>a = b</code> एक अभिव्यक्ति है जो अभिव्यक्ति<code>a</code> के समान मान का मूल्यांकन करती है, जिसमें <code>b</code> के R-मान को <code>a</code>. के L-मान में संग्रहीत करने का दुष्प्रभाव होता है। इसलिए अभिव्यक्ति <code>a = (b = c)</code> की व्याख्या अभी भी<code>b = c; a = c;</code>. के रूप में की जा सकती है; और वैकल्पिक अभिव्यक्ति<code>(a = b) = c</code> की व्याख्या <code>a = b;</code> के रूप में की जा सकती है; <code>a = c;</code>एक त्रुटि उत्पन्न करने के अतिरिक्त <code>=</code> ऑपरेटर की सही-सहयोगिता <code>a = b = c</code> जैसी अभिव्यक्तियों को <code>a = (b = c)</code>के रूप में व्याख्या करने की अनुमति देती है।
Line 44: Line 44:
गैर-सहयोगी ऑपरेटर वे ऑपरेटर होते हैं जिनका किसी अभिव्यक्ति में अनुक्रम में उपयोग किए जाने पर कोई परिभाषित व्यवहार नहीं होता है। प्रोलॉग में इन्फ़िक्स ऑपरेटर :- गैर-सहयोगी है क्योंकि <code>a :- b :- c</code>" जैसे निर्माण वाक्यविन्यास त्रुटियों का कारण बनते हैं।
गैर-सहयोगी ऑपरेटर वे ऑपरेटर होते हैं जिनका किसी अभिव्यक्ति में अनुक्रम में उपयोग किए जाने पर कोई परिभाषित व्यवहार नहीं होता है। प्रोलॉग में इन्फ़िक्स ऑपरेटर :- गैर-सहयोगी है क्योंकि <code>a :- b :- c</code>" जैसे निर्माण वाक्यविन्यास त्रुटियों का कारण बनते हैं।


एक और संभावना यह है कि कुछ ऑपरेटरों के अनुक्रमों की व्याख्या किसी अन्य विधि से की जाती है, जिसे साहचर्य के रूप में व्यक्त नहीं किया जा सकता है। इसका समान्यता: अर्थ यह है कि वाक्यात्मक रूप से, इन परिचालनों के अनुक्रम के लिए एक विशेष नियम है, और शब्दार्थिक रूप से व्यवहार अलग है। इसका एक अच्छा उदाहरण पायथन में है, जिसमें ऐसी कई संरचनाएं हैं।<ref>''[https://docs.python.org/3/reference/ The Python Language Reference],'' "[https://docs.python.org/3/reference/expressions.html 6. Expressions]"</ref> चूंकि असाइनमेंट स्टेटमेंट हैं, ऑपरेशन नहीं, इसलिए असाइनमेंट ऑपरेटर का कोई मूल्य नहीं है और वह सहयोगी नहीं है। इसके अतिरिक्त जंजीर असाइनमेंट को असाइनमेंट के अनुक्रमों के लिए एक व्याकरण नियम द्वारा कार्यान्वित किया जाता है <code>a = b = c</code>, जिसे फिर बाएं से दाएं असाइन किया जाता है। इसके अतिरिक्त, असाइनमेंट और संवर्धित असाइनमेंट के संयोजन, जैसे <code>a = b += c</code>पायथन में वैध नहीं हैं, हालांकि वे C में वैध हैं। एक अन्य उदाहरण तुलना ऑपरेटर हैं, जैसे <code>&gt;</code>, <code>==</code>, और <code>&lt;=</code>.<code>a &lt; b &lt;</code> जैसी श्रृंखलाबद्ध तुलना की व्याख्या <code>(a &lt; b) और (b &lt; c)</code> के रूप में की जाती है, जो कि <code>(a &lt; b) &lt; c</code> या <code>a &lt; (b &lt; c)</code> के समान नहीं है।<ref>''[https://docs.python.org/3/reference/ The Python Language Reference],'' "[https://docs.python.org/3/reference/expressions.html 6. Expressions]": [https://docs.python.org/3/reference/expressions.html#comparisons 6.9. Comparisons]</ref>
एक और संभावना यह है कि कुछ ऑपरेटरों के अनुक्रमों की व्याख्या किसी अन्य विधि से की जाती है, जिसे साहचर्य के रूप में व्यक्त नहीं किया जा सकता है। इसका समान्यता: अर्थ यह है कि वाक्यात्मक रूप से, इन परिचालनों के अनुक्रम के लिए एक विशेष नियम है, और शब्दार्थिक रूप से व्यवहार भिन्न है। इसका एक अच्छा उदाहरण पायथन में है, जिसमें ऐसी अनेक संरचनाएं हैं।<ref>''[https://docs.python.org/3/reference/ The Python Language Reference],'' "[https://docs.python.org/3/reference/expressions.html 6. Expressions]"</ref> चूंकि असाइनमेंट स्टेटमेंट हैं, ऑपरेशन नहीं, इसलिए असाइनमेंट ऑपरेटर का कोई मूल्य नहीं है और वह सहयोगी नहीं है। इसके अतिरिक्त श्रृंखलित असाइनमेंट को असाइनमेंट के अनुक्रमों के लिए एक व्याकरण नियम द्वारा कार्यान्वित किया जाता है <code>a = b = c</code>, जिसे फिर बाएं से दाएं असाइन किया जाता है। इसके अतिरिक्त, असाइनमेंट और संवर्धित असाइनमेंट के संयोजन, जैसे <code>a = b += c</code>पायथन में वैध नहीं हैं, चूँकि ``वह C में वैध हैं। एक अन्य उदाहरण तुलना ऑपरेटर हैं, जैसे <code>&gt;</code>, <code>==</code>, और <code>&lt;=</code>.<code>a &lt; b &lt;</code> जैसी श्रृंखलाबद्ध तुलना की व्याख्या <code>(a &lt; b) और (b &lt; c)</code> के रूप में की जाती है, जो कि <code>(a &lt; b) &lt; c</code> या <code>a &lt; (b &lt; c)</code> के समान नहीं है।<ref>''[https://docs.python.org/3/reference/ The Python Language Reference],'' "[https://docs.python.org/3/reference/expressions.html 6. Expressions]": [https://docs.python.org/3/reference/expressions.html#comparisons 6.9. Comparisons]</ref>




== यह भी देखें ==
== यह भी देखें ==
* संचालन का क्रम (अंकगणित और बीजगणित में)
* संचालन का क्रम (अंकगणित और बीजगणित में)
* [[सामान्य ऑपरेटर संकेतन]] (प्रोग्रामिंग भाषाओं में)
* [[सामान्य ऑपरेटर संकेतन]] (प्रोग्रामिंग लैंग्वेजओं में)
*सहयोगिता (सहयोगिता का गणितीय गुण)
*सहयोगिता (सहयोगिता का गणितीय गुण)


Line 58: Line 58:
== संदर्भ ==
== संदर्भ ==
{{reflist}}
{{reflist}}
[[Category: पदच्छेद]] [[Category: प्रोग्रामिंग भाषा विषय]] [[Category: ऑपरेटर्स (प्रोग्रामिंग)]]


 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
 
[[Category:CS1 maint]]
[[Category: Machine Translated Page]]
[[Category:Created On 08/07/2023]]
[[Category:Created On 08/07/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:ऑपरेटर्स (प्रोग्रामिंग)]]
[[Category:पदच्छेद]]
[[Category:प्रोग्रामिंग भाषा विषय]]

Latest revision as of 08:15, 20 September 2023

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

अभिव्यक्ति a ~ b ~ c पर विचार करें। यदि ऑपरेटर ~ ने साहचर्यता छोड़ दी है, तब इस अभिव्यक्ति की व्याख्या (a ~ b) ~ c.के रूप में की जाएगी। यदि ऑपरेटर के पास सही साहचर्य है, तब अभिव्यक्ति की व्याख्याa ~ (b ~ c) के रूप में की जाएगी। यदि ऑपरेटर गैर-सहयोगी है, तब अभिव्यक्ति एक वाक्यविन्यास त्रुटि हो सकती है, या इसका कुछ विशेष अर्थ हो सकता है। कुछ गणितीय संचालकों में अंतर्निहित साहचर्यता होती है। उदाहरण के लिए, घटाव और विभाजन, जैसा कि पारंपरिक गणित नोटेशन में उपयोग किया जाता है, स्वाभाविक रूप से बाएं-सहयोगी हैं। इसके विपरीत, जोड़ और गुणा दोनों बाएँ और दाएँ साहचर्य हैं। (उदाहरण के लिए (a * b) * c = a * (b * c)).।

अनेक प्रोग्रामिंग लैंग्वेज मैनुअल ऑपरेटर प्राथमिकता और सहयोगीता की एक तालिका प्रदान करते हैं; उदाहरण के लिए, C और C++ के लिए तालिका देखें।

यहां वर्णित सांकेतिक साहचर्य की अवधारणा गणितीय साहचर्यता से संबंधित है, किंतु उससे भिन्न है। एक ऑपरेशन जो गणितीय रूप से सहयोगी है, परिलैंग्वेज के अनुसार किसी नोटेशनल सहयोगीता की आवश्यकता नहीं है। (उदाहरण के लिए, जोड़ में साहचर्य गुण होता है, इसलिए इसका बायां साहचर्य या दायां साहचर्य होना जरूरी नहीं है।) एक ऑपरेशन जो गणितीय रूप से साहचर्य नहीं है, चूँकि, सांकेतिक रूप से बाएं-, दाएं- या गैर-सहयोगी होना चाहिए। (उदाहरण के लिए, घटाव में साहचर्य गुण नहीं होता है, इसलिए इसमें सांकेतिक साहचर्य होना चाहिए।)

उदाहरण

साहचर्यता की आवश्यकता केवल तभी होती है जब किसी अभिव्यक्ति में संचालकों की प्राथमिकता समान हो। समान्यता: + और -की प्राथमिकता समान होती है। अभिव्यक्ति 7 - 4 + 2.पर विचार करें। परिणाम या तो(7 - 4) + 2 = 5 या 7 - (4 + 2) = 1.हो सकता है। पहला परिणाम उस स्थिति से मेल खाता है जब+ और - बाएं-सहयोगी हैं, उत्तरार्द्ध जब + और - सही-सहयोगी होते हैं।

सामान्य उपयोग को प्रतिबिंबित करने के लिए, जोड़, घटाव, गुणा और भाग ऑपरेटर समान्यता: बाएं-सहयोगी होते हैं,[1][2][3][4][5] जबकि एक घातांक ऑपरेटर के लिए (यदि उपस्थित है)[6] और नुथ के अप-एरो ऑपरेटरों के बीच कोई सामान्य सहमति नहीं है। कोई भी असाइनमेंट ऑपरेटर समान्यता: राइट-एसोसिएटिव होते हैं। ऐसे स्थिति को रोकने के लिए जहां ऑपरेंड दो ऑपरेटरों के साथ जुड़े होंगे, या किसी भी ऑपरेटर के लिए समान प्राथमिकता वाले सभी ऑपरेटरों की समान संबद्धता नहीं होनी चाहिए।

एक विस्तृत उदाहरण

अभिव्यक्ति5^4^3^2, पर विचार करें, जिसमें ^को एक सही-सहयोगी घातांक ऑपरेटर के रूप में लिया गया है। टोकन को बाएँ से दाएँ पढ़ने वाला एक पार्सर, ^की दाएँ-सहयोगिता के कारण, शाखा में साहचर्य नियम को निम्नलिखित विधि से प्रयुक्त करता है :

  1. अवधि 5 पढ़ा जाता है।
  2. नॉनटर्मिनल ^ पढ़ा जाता है। नोड:5^.
  3. अवधि 4 पढ़ा जाता है। नोड:5^4.
  4. नॉनटर्मिनल ^ पढ़ा जाता है, जिससे सही-साहचर्य नियम सक्रिय हो जाता है। सहयोगीता नोड तय करती है:5^(4^.
  5. अवधि 3 पढ़ा जाता है। नोड:5^(4^3.
  6. नॉनटर्मिनल ^ पढ़ा जाता है, जिससे सही-साहचर्य नियम का पुन: अनुप्रयोग प्रारंभ हो जाता है। नोड5^(4^(3^.
  7. अवधि 2 पढ़ा जाता है। नोड5^(4^(3^2.
  8. पढ़ने के लिए कोई टोकन नहीं. पार्स ट्री उत्पन्न करने के लिए साहचर्यता प्रयुक्त करें5^(4^(3^2)).

इसके बाद इसका गहराई से मूल्यांकन किया जा सकता है, शीर्ष नोड (पहला ^) से प्रारंभ करते है:

  1. मूल्यांकनकर्ता पेड़ के नीचे पहले से दूसरे से तीसरे ^ अभिव्यक्ति तक चलता है।
  2. इसका मूल्यांकन इस प्रकार है: 32 = 9 परिणाम अभिव्यक्ति शाखा को दूसरे ^के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है।
  3. मूल्यांकन पार्स ट्री से एक स्तर ऊपर इस प्रकार जारी है: : 49 = 262,144.पुनः, परिणाम अभिव्यक्ति शाखा को पहले ^के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है।
  4. फिर से, मूल्यांकनकर्ता पेड़ को मूल अभिव्यक्ति तक ले जाता है और इस प्रकार मूल्यांकन करता है: 52621446.2060699×10183230. अंतिम शेष शाखा नष्ट हो जाती है और परिणाम समग्र परिणाम बन जाता है, जिससे समग्र मूल्यांकन पूरा हो जाता है।

एक बाएं-साहचर्य मूल्यांकन के परिणामस्वरूप पार्स ट्री ((5^4)^3)^2 और पूरी तरह से भिन्न परिणाम (6253)2 = 244,140,62525.9604645×1016. होता है।

असाइनमेंट ऑपरेटर की सही-सहयोगिता

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

सी में, असाइनमेंटa = b एक अभिव्यक्ति है जो उसी मूल्य का मूल्यांकन करती है जैसे अभिव्यक्ति b को a के प्रकार में परिवर्तित किया जाता है, b के आर-मान को aके L-मान में संग्रहीत करने के साइड इफेक्ट के साथa [lower-alpha 1] इसलिए अभिव्यक्ति a = (b = c)की व्याख्या b = c; a = c; के रूप में की जा सकती है; वैकल्पिक अभिव्यक्ति (a = b) = c एक त्रुटि उत्पन्न करती है क्योंकि a = b एक L-मान अभिव्यक्ति नहीं है, अथार्त इसमें आर-मान है किंतु L-मान नहीं है जहां cके आर-मान को स्टोर करना है। = ऑपरेटर की सही-सहयोगिता a = b = cजैसी अभिव्यक्तियों कोa = (b = c) के रूप में व्याख्या करने की अनुमति देती है।

C++ में, असाइनमेंट a = b एक अभिव्यक्ति है जो अभिव्यक्तिa के समान मान का मूल्यांकन करती है, जिसमें b के R-मान को a. के L-मान में संग्रहीत करने का दुष्प्रभाव होता है। इसलिए अभिव्यक्ति a = (b = c) की व्याख्या अभी भीb = c; a = c;. के रूप में की जा सकती है; और वैकल्पिक अभिव्यक्ति(a = b) = c की व्याख्या a = b; के रूप में की जा सकती है; a = c;एक त्रुटि उत्पन्न करने के अतिरिक्त = ऑपरेटर की सही-सहयोगिता a = b = c जैसी अभिव्यक्तियों को a = (b = c)के रूप में व्याख्या करने की अनुमति देती है।

गैर-सहयोगी ऑपरेटर

गैर-सहयोगी ऑपरेटर वे ऑपरेटर होते हैं जिनका किसी अभिव्यक्ति में अनुक्रम में उपयोग किए जाने पर कोई परिभाषित व्यवहार नहीं होता है। प्रोलॉग में इन्फ़िक्स ऑपरेटर :- गैर-सहयोगी है क्योंकि a :- b :- c" जैसे निर्माण वाक्यविन्यास त्रुटियों का कारण बनते हैं।

एक और संभावना यह है कि कुछ ऑपरेटरों के अनुक्रमों की व्याख्या किसी अन्य विधि से की जाती है, जिसे साहचर्य के रूप में व्यक्त नहीं किया जा सकता है। इसका समान्यता: अर्थ यह है कि वाक्यात्मक रूप से, इन परिचालनों के अनुक्रम के लिए एक विशेष नियम है, और शब्दार्थिक रूप से व्यवहार भिन्न है। इसका एक अच्छा उदाहरण पायथन में है, जिसमें ऐसी अनेक संरचनाएं हैं।[7] चूंकि असाइनमेंट स्टेटमेंट हैं, ऑपरेशन नहीं, इसलिए असाइनमेंट ऑपरेटर का कोई मूल्य नहीं है और वह सहयोगी नहीं है। इसके अतिरिक्त श्रृंखलित असाइनमेंट को असाइनमेंट के अनुक्रमों के लिए एक व्याकरण नियम द्वारा कार्यान्वित किया जाता है a = b = c, जिसे फिर बाएं से दाएं असाइन किया जाता है। इसके अतिरिक्त, असाइनमेंट और संवर्धित असाइनमेंट के संयोजन, जैसे a = b += cपायथन में वैध नहीं हैं, चूँकि ``वह C में वैध हैं। एक अन्य उदाहरण तुलना ऑपरेटर हैं, जैसे >, ==, और <=.a < b < जैसी श्रृंखलाबद्ध तुलना की व्याख्या (a < b) और (b < c) के रूप में की जाती है, जो कि (a < b) < c या a < (b < c) के समान नहीं है।[8]


यह भी देखें

  • संचालन का क्रम (अंकगणित और बीजगणित में)
  • सामान्य ऑपरेटर संकेतन (प्रोग्रामिंग लैंग्वेजओं में)
  • सहयोगिता (सहयोगिता का गणितीय गुण)

टिप्पणियाँ

  1. An expression can be made into a statement by following it with a semicolon; i.e. a = b is an expression but a = b; is a statement.


संदर्भ

  1. Bronstein, Ilja Nikolaevič; Semendjajew, Konstantin Adolfovič (1987) [1945]. "2.4.1.1.". In Grosche, Günter; Ziegler, Viktor; Ziegler, Dorothea (eds.). गणित की पॉकेट बुक (in German). Vol. 1. Translated by Ziegler, Viktor. Weiß, Jürgen (23 ed.). Thun and Frankfurt am Main: Verlag Harri Deutsch (and B. G. Teubner Verlagsgesellschaft, Leipzig). pp. 115–120. ISBN 3-87144-492-8.{{cite book}}: CS1 maint: unrecognized language (link)
  2. Chemnitz University of Technology: Priority and associativity of operators (archived translation)
  3. Education Place: The Order of Operations
  4. Khan Academy: The Order of Operations, timestamp 5m40s
  5. Virginia Department of Education: Using Order of Operations and Exploring Properties, section 9
  6. एक्सपोनेंटिएशन एसोसिएटिविटी और स्टैंडर्ड मैथ नोटेशन कोडप्ली। 23 अगस्त 2016. 20 सितंबर 2016 को लिया गया।
  7. The Python Language Reference, "6. Expressions"
  8. The Python Language Reference, "6. Expressions": 6.9. Comparisons