क्या कोई प्रोग्रामिंग भाषा वैरिएबल का उपयोग करती है जैसे कि वे गणित में हैं?


11

गणित में, एक चर का मतलब है कि आप वहां कोई भी संख्या डाल सकते हैं, और एक समीकरण अभी भी सही होगा:

root(square(x)) = abs(x)

प्रोग्रामिंग भाषाओं में, यह ऐसा नहीं है: एक संस्करण बदल सकता है। पायथन में:

y = (x**2)**.5
x *= 2
assert y == abs(x)

एक अपवाद बढ़ाएगा, क्योंकि अंतिम पंक्ति में x समान नहीं है।

क्या प्रोग्रामिंग भाषाएं हैं जो अपरिवर्तनीय चर का उपयोग करती हैं?


5
गणित में, अधिकांश समीकरण पहचान नहीं हैं। उदाहरण के लिए, x ^ 2 + 5 = 6x वैध है अगर और केवल अगर x = 1 या x = 5. कुछ "ब्रह्मांड" में सभी मानों के लिए मान्य समीकरण (जैसे सभी वास्तविक संख्याओं का सेट), जैसे पाप ( 2x) = 2 पाप x cos x, पहचान कहलाता है ।
एंड्रियास रिजेब्रांड

4
गणित में चर! = प्रोग्रामिंग भाषाओं में चर। मैंने हमेशा सोचा है कि उनके पास अलग-अलग नाम भी होने चाहिए, क्योंकि बहुत से लोग भ्रमित होते हैं जब वे गणित में प्रोग्रामिंग के बारे में चर के बारे में पूर्व धारणाएं लाते हैं।
रेयान

1
मुझे लगता है कि गणित में चर का लक्ष्य प्रोग्रामिंग के समान नहीं है। गणित में, चर एक अज्ञात मूल्य का प्रतिनिधित्व करते हैं जिसे आप जानना चाहते हैं या किसी सूत्र में एक जगह है जिसे आप परिणाम लेने के लिए एक मूल्य रखते हैं। सामान्य प्रोग्रामिंग भाषाओं के लिए, केवल दूसरा मामला समझ में आता है। पहले मामले के लिए आपको मैथमेटिका जैसे सॉफ्टवेयर की आवश्यकता होगी।
पगोटी

नहीं, वे नहीं। "X = 5" पर कोई भी संख्या डालने का प्रयास करें ।

जवाबों:


6

अपने शीर्षक प्रश्न का उत्तर देने के लिए "क्या कोई प्रोग्रामिंग भाषा गणित में वैरिएबल का उपयोग करती है?": C, C #, Java, C ++, और कोई भी अन्य C शैली भाषा, चर का उपयोग उस तरह से करती है जैसे वे गणित में करती हैं।

आपको बस = के बजाय == का उपयोग करने की आवश्यकता है।

अगर मैं आपका मूल ले लूं

root(square(x)) = abs(x)

तब मैं सिंटैक्स के अलावा किसी भी परिवर्तन के बिना सीधे सी # में अनुवाद कर सकता हूं। Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)

यह x के किसी भी मान के लिए सही का मूल्यांकन करेगा जब तक कि आपके द्वारा उपयोग किए जा रहे डेटा प्रकार के लिए x वर्ग से अधिकतम से कम न हो। (जावा सकल रूप से समान होगा, लेकिन मेरा मानना ​​है कि मठ नाम स्थान थोड़ा अलग है)

यह अगला बिट C # में संकलित करने में विफल रहेगा क्योंकि संकलक यह जानने के लिए पर्याप्त स्मार्ट है कि मैं एक ऑपरेशन के रिटर्न को दूसरे ऑपरेशन में नहीं सौंप सकता।

Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)

अपरिवर्तनशीलता का इससे कोई लेना-देना नहीं है। आपको अभी भी एक अपरिवर्तनीय भाषा में मान निर्दिष्ट करने की आवश्यकता है और यह पूरी तरह से संभव है कि किसी दिए गए भाषा को ऑपरेटर के रूप में = का उपयोग करके ऐसा करने के लिए चुना जा सकता है।

इस बिंदु को और साबित करते हुए, यह लूप तब तक चलेगा जब तक आप x के कानूनी मूल्यों को समाप्त नहीं कर लेते हैं और एक अतिप्रवाह अपवाद प्राप्त करते हैं:

 while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
        {
            ++x;
            System.Console.WriteLine(x);
        }

यही कारण है कि गणितज्ञ असाइनमेंट के लिए = के उपयोग से नफरत करते हैं। यह उन्हें भ्रमित करता है। मुझे लगता है कि इससे आप खुद को भ्रमित कर रहे हैं। अपना उदाहरण लीजिए

y = (x**2)**.5
x *= 2
assert y == abs(x)

जब मैं इसे बीजगणित में बदल देता हूं, तो मुझे यह मिल जाता है:

abs (2x) = रूट (x ^ 2)

बेशक 0. के अलावा अन्य मूल्यों के लिए सही नहीं है। जब आप मूल समीकरण के बाएं हाथ की ओर और दाहिने हाथ की ओर का मूल्यांकन करने के बीच अतिरिक्त कदम जोड़ते हैं तो केवल अपरिवर्तनीयता आपको x के मूल्य को बदलने की त्रुटि से बचाती है। यह वास्तव में नहीं बदलता है कि आप अभिव्यक्ति का मूल्यांकन कैसे करते हैं।


24

विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग भाषाएं, जैसे हास्केल , अपरिवर्तनीय चर लागू करती हैं। मैं उन्हें चर के बजाय पहचानकर्ता कहना पसंद करता हूं।


3
Erlang में, जो एक अशुद्ध कार्यात्मक भाषा है, चर अपरिवर्तनीय हैं।
sepp2k

मैं बहुत ज्यादा एर्लैंग नहीं जानता। वे परमाणु हैं, है ना? क्या Erlang किसी भी प्रकार के परिवर्तनशील परिवर्तनशील संग्रहण की अनुमति देता है?
इयोनू जी स्टेन

3
@ आयन: नहीं, एरलंग परमाणुओं को लिस्प और माणिक में प्रतीक कहा जाता है। आपके दूसरे प्रश्न के बारे में: इसमें प्रक्रिया शब्दकोश है, जो एक वैश्विक (अच्छी तरह से, प्रति-प्रक्रिया), म्यूटेबल हैश मैप है। हालाँकि मेरे अनुभव में इसका उपयोग बहुत कम किया जाता है। इसके अलावा, रेफरेंशियल ट्रांसपेरेंसी को तोड़ने का एकमात्र तरीका मैसेज पासिंग है।
sepp2k

4
हम्म, मुझे खुद को कुछ एर्लैंग सीखना चाहिए :)
आयनो जी। स्टेन ऑक्ट

यह पूछे गए प्रश्न का उत्तर कैसे देता है?
gnat

5

=प्रोग्रामिंग भाषाओं में उपयोग किया जाने वाला संकेत भ्रामक है। <-, जिसका अर्थ है "स्टोर", या यहां तक ​​कि COBOL MOVEका उपयोग किया जाना चाहिए।

इसके अतिरिक्त, प्रोलॉग गणित की तरह चर का उपयोग करता है: चर नहीं बदल सकते हैं, और अगर समाधान मौजूद है, तो यह देखने के लिए प्रोगोल इंजन चर में भरेगा।

इसके अलावा, करी हास्केल और प्रोलॉग का मिश्रण है।


3

C, C ++ और Objective-C फ़ंक्शन (और विधि) तर्कों के लिए अपरिवर्तनीयता, साथ ही साथ अन्य चर (पहचानकर्ता) को "कॉन्स्ट" प्रकार के क्वालीफायर के साथ निर्दिष्ट कर सकते हैं।


3

कक्षाओं में अपडेट की अनुमति न देकर आप पायथन में भी अपरिवर्तनीयता का अनुकरण कर सकते हैं। जैसा कि पहले कहा गया था कि अधिकांश शुद्ध कार्यात्मक प्रोग्रामिंग भाषा अपरिवर्तनीयता को लागू करती हैं। क्लोजर जेवीएम प्लेटफॉर्म के लिए एक हालिया जोड़ है (क्लीजुर एक एलआईएसपी बोली है)

में स्काला (यह भी एक JVM भाषा) OO और एफपी समर्थन चर का एक एकजुटता के सूत्रधार के साथ घोषित valअपरिवर्तनीय हैं। स्काला अभिव्यंजना और OO / FP हाइब्रिड सपोर्ट इसे Mathematica के समान बनाता है । ( अक्का एक ढाँचा है जो एसएलएम .. जैसे स्काला और जावा में एरलांग ओटीपी और क्लोजर कार्यक्षमता को जोड़ता है ।) लाकासा स्काला में वस्तु क्षमता अनुशासन को लागू करने के लिए और अद्वितीय वस्तु संदर्भ प्रदान करने के लिए टाइप सिस्टम और प्रोग्रामिंग मॉडल जोड़ता है। ( कोड ) ( सैद्धांतिक पृष्ठभूमि )

जावा में घोषित एक चर finalअपरिवर्तनीय है, और Google अमरूद जैसे जावा पुस्तकालयों में संग्रह के अपरिवर्तनीय पुस्तकालय शामिल हैं। जावा Strings भी हमेशा अपरिवर्तनीय होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.