2009-11-24 11 views
12

ऐसा लगता है कि यह सूचियों मॉड्यूल में असंगत है। उदाहरण के लिए, विभाजित संख्या में पहली तर्क और दूसरी सूची के रूप में सूची होती है, लेकिन उपन्यासकारों की सूची पहली तर्क के रूप में होती है और लेन दूसरे तर्क के रूप में होती है।क्या एरलांग में फ़ंक्शन तर्कों को ऑर्डर करने का कोई मूर्ख तरीका है?

+0

नहीं, यह एक गड़बड़ है क्योंकि लाइब्रेरी इतनी अधिक डिजाइन किए गए थे जितना वे विकसित हुए। Rvirding के जवाब का इंतजार और उसकी शैली का पालन करें। :) – Christian

+1

शायद ऐसा इसलिए है क्योंकि मैं ओओ पृष्ठभूमि से आ रहा हूं, लेकिन ऐसा लगता है कि सूचियों पर चलने वाले सभी कार्यों को सूची को पहले तर्क के रूप में लेना चाहिए – pjb3

उत्तर

19

ठीक है, मुझे थोड़ा याद है और मेरी शैली के पीछे कुछ सिद्धांत हैं।

जैसा कि ईसाई ने कहा है कि पुस्तकालयों ने विकसित किया है और तर्क आदेश प्राप्त करने के लिए प्रेरित किया है और हम उन आवेगों से महसूस करते हैं जिन्हें हम अभी प्राप्त कर रहे थे। तो उदाहरण के लिए तत्व/सेलेमेंटमेंट में तर्क आदेश क्यों है, क्योंकि यह प्रोलॉग में arg/3 predicate से मेल खाता है; तार्किक लेकिन अब नहीं। अक्सर हमारे पास चीज पहले पर काम किया जा रहा था, लेकिन दुर्भाग्य से हमेशा नहीं। यह अक्सर एक अच्छा विकल्प होता है क्योंकि यह "वैकल्पिक" तर्कों को अंत में आसानी से जोड़ा जा सकता है; उदाहरण के लिए स्ट्रिंग: सबस्ट्र/2/3। चीज के साथ कार्य अंतिम तर्क के रूप में अक्सर करीबी के साथ कार्यात्मक भाषाओं से प्रभावित होते थे, उदाहरण के लिए हैस्केल, जहां विशिष्ट कार्यों को बनाने के लिए करी और आंशिक मूल्यांकन का उपयोग करना बहुत आसान है, जिसे चीज़ पर लागू किया जा सकता है। सूचियों में उच्च आदेश कार्यों में यह बहुत ध्यान देने योग्य है।

हमारे पास एकमात्र प्रभाव ओओ दुनिया से नहीं था। :-)

आमतौर पर हम कम से कम एक मॉड्यूल के भीतर संगत होने में कामयाब रहे, लेकिन हमेशा नहीं। सूचियों को फिर से देखें। हमने कुछ स्थिरता रखने की कोशिश की, इसलिए उच्च क्रम में तर्क आदेश dict/sets में कार्य सूचियों में संबंधित कार्यों से मेल खाता है।

समस्या इस तथ्य से भी बढ़ गई कि हम, विशेष रूप से मुझे, पुस्तकालयों के लिए एक बदसूरत रवैया था। मैंने उन्हें भाषा के लिए एक विक्रय बिंदु के रूप में नहीं देखा, इसलिए मैं इसके बारे में चिंतित नहीं था। "अगर आप एक पुस्तकालय चाहते हैं जो कुछ करता है तो आप इसे लिखते हैं" मेरा आदर्श वाक्य था। इसका मतलब था कि मेरी पुस्तकालयों को संरचित किया गया था, बस एक ही संरचना के साथ नहीं। :-) यह था कि शुरुआती पुस्तकालयों में से कितने आया था।

यह, ज़ाहिर है, अनावश्यक भ्रम पैदा करता है और कम से कम विस्मय के कानून को तोड़ता है, लेकिन हम इसके बारे में कुछ भी करने में सक्षम नहीं हैं। मॉड्यूल को संशोधित करने के किसी भी सुझाव को हमेशा "शानदार" के साथ पूरा किया गया है।

मेरी व्यक्तिगत शैली आमतौर पर संरचित होती है, हालांकि मुझे नहीं पता कि यह किसी भी लिखित दिशानिर्देश या मानकों के अनुरूप है या नहीं।

मैं आम तौर पर बात या बातें हैं मैं, पहले तर्क के रूप में पर काम कर रहा हूँ या कम से कम बहुत शुरुआत के करीब; आदेश सबसे अच्छा लगता है पर निर्भर करता है। यदि कोई वैश्विक राज्य है जो पूरे मॉड्यूल के माध्यम से जंजीर है, जो आमतौर पर होता है, तो इसे अंतिम तर्क के रूप में रखा जाता है और एक बहुत ही वर्णनात्मक नाम दिया जाता है जैसे St0, St1, ... (मैं लघु चर नामों के चर्च से संबंधित हूं)। तर्क जो कार्यों (इनपुट और आउटपुट दोनों) के माध्यम से बंधे होते हैं, मैं वापसी आदेश के रूप में एक ही तर्क आदेश रखने की कोशिश करता हूं। यह कोड की संरचना को देखना अधिक आसान बनाता है। इसके अलावा मैं एक साथ जुड़े तर्कों को एक साथ समूहबद्ध करने का प्रयास करता हूं।साथ ही, जहां संभव हो, मैं पूरे मॉड्यूल में एक ही तर्क आदेश को संरक्षित करने का प्रयास करता हूं।

इनमें से कोई भी बहुत क्रांतिकारी नहीं है, लेकिन मुझे लगता है कि यदि आप एक सतत शैली रखते हैं तो यह चिंता करने की एक कम चीज़ है और यह आपके कोड को बेहतर महसूस करती है और आम तौर पर अधिक पठनीय हो जाती है। अगर तर्क आदेश गलत लगता है तो भी मैं वास्तव में कोड को फिर से लिखूंगा।

एक छोटा सा जो मदद मिल सकती है उदाहरण:

fubar({f,A0,B0}, Arg2, Ch0, Arg4, St0) -> 
    {A1,Ch1,St1} = foo(A0, Arg2, Ch0, St0), 
    {B1,Ch2,St2} = bar(B0, Arg4, Ch1, St1), 
    Res = baz(A1, B1), 
    {Res,Ch2,St2}. 

यहाँ Ch जबकि St अधिक वैश्विक स्थिति है एक स्थानीय चर के माध्यम से श्रृंखलित है। यदि आप एक लंबा उदाहरण चाहते हैं, तो एलएफई, विशेष रूप से कंपाइलर के लिए जिथब पर कोड देखें।

यह क्षमा करने के लिए बहुत लंबा हो गया था, क्षमा करें।

पीएस ऑब्जेक्ट के बजाय मैंने चीज शब्द का उपयोग किया था, जो मैं बात कर रहा था उसके बारे में भ्रम से बचने के लिए।

4

नहीं, इस अर्थ में आपके द्वारा उपयोग किए जाने वाले अर्थ में कोई लगातार उपयोग नहीं किया गया है।

हालांकि, कुछ उपयोगी प्रासंगिक संकेत हैं जो विशेष रूप से लागू होते हैं जब आप गहराई से रिकर्सिव कॉल करने जा रहे हैं। उदाहरण के लिए, तर्क सूची में उसी क्रम/स्थिति में पूंछ कॉल के दौरान जो भी तर्क अपरिवर्तित रहेगा, वर्चुअल मशीन को कुछ बहुत अच्छा अनुकूलन करने की अनुमति देता है।

+2

प्रश्न: मुझे अपने तर्क कहां रखना चाहिए? ए: तर्क जहां वे हैं, रहना चाहिए। प्राचीन ज्ञान की तरह लगता है: ओ) – Zed

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

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