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

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Property determining how equal-precedence operators are grouped}}{{for|the mathematical concept of associativity|Associative property}}
{{Short description|Property determining how equal-precedence operators are grouped}}{{for|साहचर्य की गणितीय अवधारणा|संबंधी गुण }}


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


अभिव्यक्ति पर विचार करें <code>a ~ b ~ c</code>. यदि ऑपरेटर <code>~</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++ के लिए तालिका।
कई प्रोग्रामिंग भाषा मैनुअल ऑपरेटर प्राथमिकता और सहयोगीता की एक तालिका प्रदान करते हैं; उदाहरण के लिए, C और C++ के लिए तालिका देखें।


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


== उदाहरण ==
== उदाहरण ==


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


सामान्य उपयोग को प्रतिबिंबित करने के लिए, जोड़, [[घटाव]], [[गुणा]] और भाग (गणित) ऑपरेटर आमतौर पर बाएं-सहयोगी होते हैं,<ref name="Bronstein_1987">{{cite book |title=गणित की पॉकेट बुक|title-link=:de:गणित की पॉकेट बुक|author-first1=Ilja Nikolaevič<!-- Nikolajewitsch --> |author-last1=Bronstein<!-- 1903–1976 --> |author-first2=Konstantin Adolfovič<!-- Adolfowitsch --> |author-last2=Semendjajew<!-- 1908–1988 --> |editor-first1=Günter |editor-last1=Grosche |editor-first2=Viktor |editor-last2=Ziegler<!-- 1922–1980--> |editor-first3=Dorothea |editor-last3=Ziegler |others=Weiß, Jürgen<!-- lector --> |translator-first=Viktor |translator-last=Ziegler |volume=1 |date=1987 |edition=23 |orig-year=1945 |publisher=[[Verlag Harri Deutsch]] (and [[B. G. Teubner Verlagsgesellschaft]], Leipzig) |location=Thun and Frankfurt am Main |language=German |chapter=2.4.1.1. |pages=115–120 |isbn=3-87144-492-8}}</ref><ref>[[Chemnitz University of Technology]]: [https://www.tu-chemnitz.de/urz/archiv/kursunterlagen/C/kap2/vorrang.htm Priority and associativity of operators] ([https://archive.today/20171009233824/https://www.tu-chemnitz.de/urz/archiv/kursunterlagen/C/kap2/vorrang.htm archived translation])</ref><ref>Education Place: [http://eduplace.com/math/mathsteps/4/a/index.html The Order of Operations]</ref><ref>[[Khan Academy]]: [https://www.khanacademy.org/math/pre-algebra/pre-algebra-arith-prop/pre-algebra-order-of-operations/v/introduction-to-order-of-operations The Order of Operations], timestamp [https://www.youtube.com/watch?v=ClYdw4d4OmA&t=5m40s 5m40s]</ref><ref>Virginia Department of Education: [http://www.doe.virginia.gov/instruction/mathematics/middle/algebra_readiness/curriculum_companion/order-operations.pdf#page=3 Using Order of Operations and Exploring Properties], section 9</ref> जबकि एक [[घातांक]] ऑपरेटर के लिए (यदि मौजूद है)<ref name="Codeplea_2016">[https://codeplea.com/exponentiation-associativity-options एक्सपोनेंटिएशन एसोसिएटिविटी और स्टैंडर्ड मैथ नोटेशन] कोडप्ली। 23 अगस्त 2016. 20 सितंबर 2016 को लिया गया।</ref> और नुथ के अप-एरो संकेतन|नुथ के अप-एरो ऑपरेटरों के बीच कोई सामान्य सहमति नहीं है। कोई भी [[असाइनमेंट (कंप्यूटर विज्ञान)]] ऑपरेटर आमतौर पर राइट-एसोसिएटिव होते हैं। ऐसे मामलों को रोकने के लिए जहां ऑपरेंड दो ऑपरेटरों के साथ जुड़े होंगे, या बिल्कुल भी ऑपरेटर नहीं होंगे, समान प्राथमिकता वाले ऑपरेटरों के पास समान सहयोगीता होनी चाहिए।
सामान्य उपयोग को प्रतिबिंबित करने के लिए, जोड़, घटाव, गुणा और भाग ऑपरेटर समान्यता: बाएं-सहयोगी होते हैं,<ref name="Bronstein_1987">{{cite book |title=गणित की पॉकेट बुक|title-link=:de:गणित की पॉकेट बुक|author-first1=Ilja Nikolaevič<!-- Nikolajewitsch --> |author-last1=Bronstein<!-- 1903–1976 --> |author-first2=Konstantin Adolfovič<!-- Adolfowitsch --> |author-last2=Semendjajew<!-- 1908–1988 --> |editor-first1=Günter |editor-last1=Grosche |editor-first2=Viktor |editor-last2=Ziegler<!-- 1922–1980--> |editor-first3=Dorothea |editor-last3=Ziegler |others=Weiß, Jürgen<!-- lector --> |translator-first=Viktor |translator-last=Ziegler |volume=1 |date=1987 |edition=23 |orig-year=1945 |publisher=[[Verlag Harri Deutsch]] (and [[B. G. Teubner Verlagsgesellschaft]], Leipzig) |location=Thun and Frankfurt am Main |language=German |chapter=2.4.1.1. |pages=115–120 |isbn=3-87144-492-8}}</ref><ref>[[Chemnitz University of Technology]]: [https://www.tu-chemnitz.de/urz/archiv/kursunterlagen/C/kap2/vorrang.htm Priority and associativity of operators] ([https://archive.today/20171009233824/https://www.tu-chemnitz.de/urz/archiv/kursunterlagen/C/kap2/vorrang.htm archived translation])</ref><ref>Education Place: [http://eduplace.com/math/mathsteps/4/a/index.html The Order of Operations]</ref><ref>[[Khan Academy]]: [https://www.khanacademy.org/math/pre-algebra/pre-algebra-arith-prop/pre-algebra-order-of-operations/v/introduction-to-order-of-operations The Order of Operations], timestamp [https://www.youtube.com/watch?v=ClYdw4d4OmA&t=5m40s 5m40s]</ref><ref>Virginia Department of Education: [http://www.doe.virginia.gov/instruction/mathematics/middle/algebra_readiness/curriculum_companion/order-operations.pdf#page=3 Using Order of Operations and Exploring Properties], section 9</ref> जबकि एक घातांक ऑपरेटर के लिए (यदि उपस्थित  है)<ref name="Codeplea_2016">[https://codeplea.com/exponentiation-associativity-options एक्सपोनेंटिएशन एसोसिएटिविटी और स्टैंडर्ड मैथ नोटेशन] कोडप्ली। 23 अगस्त 2016. 20 सितंबर 2016 को लिया गया।</ref> और नुथ के अप-एरो ऑपरेटरों के बीच कोई सामान्य सहमति नहीं है। कोई भी असाइनमेंट ऑपरेटर समान्यता: राइट-एसोसिएटिव होते हैं। ऐसे स्थिति को रोकने के लिए जहां ऑपरेंड दो ऑपरेटरों के साथ जुड़े होंगे, या किसी भी ऑपरेटर के लिए समान प्राथमिकता वाले सभी ऑपरेटरों की समान संबद्धता नहीं होनी चाहिए।


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


अभिव्यक्ति पर विचार करें <code>5^4^3^2</code>, जिसमें <code>^</code> इसे राइट-एसोसिएटिव घातांक ऑपरेटर के रूप में लिया जाता है। बाएं से दाएं टोकन पढ़ने वाला एक पार्सर दाएं-सहयोगिता के कारण शाखा पर सहयोगीता नियम लागू करेगा <code>^</code>, इस अनुसार:
अभिव्यक्ति<code>5^4^3^2</code>, पर विचार करें, जिसमें <code>^</code>को एक सही-सहयोगी घातांक ऑपरेटर के रूप में लिया गया है। टोकन को बाएँ से दाएँ पढ़ने वाला एक पार्सर, <code>^</code>की दाएँ-सहयोगिता के कारण, शाखा में साहचर्य नियम को निम्नलिखित विधि  से प्रयुक्त करता है :
# अवधि <code>5</code> पढ़ा जाता है।
# अवधि <code>5</code> पढ़ा जाता है।
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है। नोड:<code>5^</code>.
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है। नोड:<code>5^</code>.
Line 23: Line 23:
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है, जिससे सही-साहचर्य नियम सक्रिय हो जाता है। सहयोगीता नोड तय करती है:<code>5^(4^</code>.
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है, जिससे सही-साहचर्य नियम सक्रिय हो जाता है। सहयोगीता नोड तय करती है:<code>5^(4^</code>.
# अवधि <code>3</code> पढ़ा जाता है। नोड:<code>5^(4^3</code>.
# अवधि <code>3</code> पढ़ा जाता है। नोड:<code>5^(4^3</code>.
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है, जिससे सही-साहचर्य नियम का पुन: अनुप्रयोग शुरू हो जाता है। नोड<code>5^(4^(3^</code>.
# नॉनटर्मिनल <code>^</code> पढ़ा जाता है, जिससे सही-साहचर्य नियम का पुन: अनुप्रयोग प्रारंभ हो जाता है। नोड<code>5^(4^(3^</code>.
# अवधि <code>2</code> पढ़ा जाता है। नोड<code>5^(4^(3^2</code>.
# अवधि <code>2</code> पढ़ा जाता है। नोड<code>5^(4^(3^2</code>.
# पढ़ने के लिए कोई टोकन नहीं. पार्स ट्री उत्पन्न करने के लिए साहचर्यता लागू करें<code>5^(4^(3^2))</code>.
# पढ़ने के लिए कोई टोकन नहीं. पार्स ट्री उत्पन्न करने के लिए साहचर्यता प्रयुक्त करें<code>5^(4^(3^2))</code>.
इसके बाद शीर्ष नोड (पहले) से शुरू करते हुए गहराई-प्रथम का मूल्यांकन किया जा सकता है <code>^</code>):
इसके बाद इसका गहराई से मूल्यांकन किया जा सकता है, शीर्ष नोड (पहला ^) से प्रारंभ करते है:
# मूल्यांकनकर्ता पेड़ के नीचे चलता है, पहले से, दूसरे से, तीसरे तक <code>^</code> अभिव्यक्ति।
#मूल्यांकनकर्ता पेड़ के नीचे पहले से दूसरे से तीसरे <code>^</code> अभिव्यक्ति तक चलता है।
# इसका मूल्यांकन इस प्रकार है: 3{{sup|2}} = 9. परिणाम अभिव्यक्ति शाखा को दूसरे के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है <code>^</code>.
#इसका मूल्यांकन इस प्रकार है: 3{{sup|2}} = 9 परिणाम अभिव्यक्ति शाखा को दूसरे <code>^</code>के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है।
# मूल्यांकन [[पार्स वृक्ष]] में एक स्तर ऊपर इस प्रकार जारी रहता है: 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>, वैल्यू (कंप्यूटर साइंस)#lrvalue|R-वैल्यू को स्टोर करने के [[ दुष्प्रभाव (कंप्यूटर विज्ञान) |दुष्प्रभाव (कंप्यूटर विज्ञान)]] के साथ <code>b</code> वैल्यू (कंप्यूटर साइंस)#lrvalue|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> यह एक एल-वैल्यू एक्सप्रेशन नहीं है, यानी इसमें एक आर-वैल्यू है लेकिन एल-वैल्यू नहीं है जहां आर-वैल्यू को स्टोर किया जाए <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>के एल-मान में संग्रहीत करने के साइड इफेक्ट के साथ<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> के रूप में व्याख्या करने की अनुमति देती है।


[[C++]] में, असाइनमेंट <code>a = b</code> एक अभिव्यक्ति है जो अभिव्यक्ति के समान मूल्य का मूल्यांकन करती है <code>a</code>, के आर-मूल्य को संग्रहीत करने के दुष्प्रभाव के साथ <code>b</code> के एल-मूल्य में <code>a</code>. इसलिए अभिव्यक्ति <code>a = (b = c)</code> अभी भी इसकी व्याख्या की जा सकती है <code>b = c; a = c;</code>. और वैकल्पिक अभिव्यक्ति <code>(a = b) = c</code> के रूप में समझा जा सकता है <code>a = b; 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>के रूप में व्याख्या करने की अनुमति देती है।


== गैर-सहयोगी ऑपरेटर ==
== गैर-सहयोगी ऑपरेटर ==
गैर-सहयोगी ऑपरेटर वे ऑपरेटर होते हैं जिनका किसी अभिव्यक्ति में अनुक्रम में उपयोग किए जाने पर कोई परिभाषित व्यवहार नहीं होता है। [[प्रोलॉग]] में इन्फ़िक्स ऑपरेटर <code>:-</code> गैर-सहयोगी है क्योंकि निर्माण जैसे<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> पायथन में वैध नहीं हैं, हालांकि वे सी में वैध हैं। एक अन्य उदाहरण तुलना ऑपरेटर हैं, जैसे <code>&gt;</code>, <code>==</code>, और <code>&lt;=</code>. एक जंजीर तुलना की तरह <code>a &lt; b &lt; c</code> के रूप में व्याख्या की गई है <code>(a &lt; b) and (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>





Revision as of 09:07, 15 July 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के एल-मान में संग्रहीत करने के साइड इफेक्ट के साथa [lower-alpha 1] इसलिए अभिव्यक्ति a = (b = c)की व्याख्या b = c; a = c; के रूप में की जा सकती है; वैकल्पिक अभिव्यक्ति (a = b) = c एक त्रुटि उत्पन्न करती है क्योंकि a = b एक एल-मान अभिव्यक्ति नहीं है, अथार्त इसमें आर-मान है किंतु एल-मान नहीं है जहां 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