2012-06-29 14 views
7

मैं वर्तमान में एरलांग मास्टर करने की कोशिश कर रहा हूं। यह पहली कार्यात्मक प्रोग्रामिंग भाषा है जिसे मैंने देखा और मैंने देखा कि एरलांग में, आपके द्वारा किए गए प्रत्येक असाइनमेंट एक असाइनमेंट है। और जाहिर है, न केवल एरलांग में, बल्कि कई अन्य कार्यात्मक प्रोग्रामिंग भाषाओं में, असाइनमेंट एकल असाइनमेंट के माध्यम से किया जाता है।एकल असाइनमेंट का उद्देश्य

मैं वास्तव में उलझन में हूं कि उन्होंने ऐसा क्यों किया। एकल असाइनमेंट का उद्देश्य क्या है? इससे हमें क्या लाभ मिल सकते हैं?

+0

मैं [इस उत्तर] की जांच करने का सुझाव देता हूं (http://stackoverflow.com/a/9764997/1229023)। संक्षेप में, यह एक असाइनमेंट नहीं है; यह एक नाम बाध्यकारी प्रक्रिया है। – raina77ow

+0

शायद [programmers.se] के लिए बेहतर फिट है। – darvids0n

+0

[इस सवाल] के उत्तर [http://stackoverflow.com/questions/9494601/why-is- कार्यात्मक- प्रोग्रामिंग- अच्छा) बिंदु पर और अधिक हो सकता है। एसआईसीपी लिंक के लिए –

उत्तर

9

अपरिवर्तनीयता (जिसे आप एकल असाइनमेंट कहते हैं), बहुत सी चीजों को सरल बनाता है क्योंकि यह आपके कार्यक्रमों से "समय" चर लेता है।

उदाहरण के लिए, गणित में अगर आप कहते हैं कि

x = y 

आप हर जगह y के लिए x जगह ले सकता है। परिचालन प्रोग्रामिंग भाषाओं में आप यह सुनिश्चित नहीं कर सकते कि यह समानता है: कोड की प्रत्येक पंक्ति से जुड़े "समय" (राज्य) है। इस बार राज्य अवांछित side effects के लिए खुला दरवाजा छोड़ देता है जो दुश्मन संख्या मॉड्यूलरिटी और समरूपता में से एक है।

अधिक जानकारी के लिए इस देखें: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#%_sec_3.1.1

+0

+1। :) –

3

की Single Assignment वजह से, साइड इफेक्ट तो बहुत कम हैं। असल में, एरलांग में दौड़ की स्थिति या किसी भी दुष्प्रभाव के साथ कोड लिखना इतना मुश्किल है। ऐसा इसलिए है क्योंकि, कंपाइलर इज़िली गैर-प्रयोग किए गए चर, बताए गए शब्दों का उपयोग नहीं करता है, छायांकित चर (विशेष रूप से funs के अंदर) e.t.c.

एरलांग में यह एक और फायदा है जो Referential Transparency है। एरलांग में एक फ़ंक्शन केवल MACROS को छोड़कर वैश्विक चर पर निर्भर करता है (और मैक्रोज़ रन-टाइम पर बदला नहीं जा सकता है, वे स्थिरांक हैं।)।

आखिरकार, यदि आपने Erlang Movie देखा है, तो Sophisticated Error Detection Mechanism जो एरलांग में बनाया गया था इस तथ्य पर निर्भर करता है कि एरलांग में, चर एक बार असाइन किए जाते हैं।

+2

नोट, हालांकि, एरलांग में कार्य पूरी तरह से पारदर्शी रूप से पारदर्शी नहीं हैं: किसी अन्य प्रक्रिया को संदेश भेजना दुष्प्रभावों के परिणामस्वरूप भविष्य में कॉल के मूल्य को बदल सकता है। वैश्विक चर के लिए, प्रक्रिया शब्दकोश, ईटीएस टेबल और इसी तरह की है। –

+0

हां, एरलांग सभी संदर्भित पारदर्शी नहीं है, और अपरिवर्तनीयता केवल एक तरफ प्रभाव को हटाती है (अर्थात् स्मृति की संपादन करना जो दुनिया की स्थिति को बदल सकता है), लेकिन सामान्य रूप से दुष्प्रभावों को सीमित करने के लिए कुछ भी नहीं करता है। –

2

चर रखने के बाद उनके मूल्यों को कोड को समझना और डीबग करना अधिक आसान हो जाता है। समवर्ती प्रक्रियाओं के साथ आपको वैसे भी समस्या मिलती है, इसलिए किसी भी चरम पर किसी भी समय संभावित रूप से अपना मूल्य बदलने के बिना पर्याप्त जटिलता होती है। इसे स्पष्ट करते समय केवल उन्हें अनुमति देकर साइड इफेक्ट्स को समाहित करने के बारे में सोचें।

संबंधित मुद्दे