2011-06-12 16 views
11

मैं जानना चाहता हूं कि क्यों हास्केल डिजाइनर प्राथमिकता के केवल 10 स्तरों की अनुमति देने के लिए सहमत हुए? क्या किसी ने इसे अपर्याप्त पाया है?हास्केल की प्राथमिकता में केवल 10 स्तर क्यों हैं? क्या 10 की आकृति पर्याप्त है?

+0

11 वें स्तर को जोड़ने से दुष्प्रभाव ओ.ओ –

+8

होगा क्योंकि निगेल टफनेल को हास्केल नहीं पता है। –

उत्तर

20

मेरे सर्वोत्तम ज्ञान के लिए, यह पूरी तरह से मनमाना है। सभी दस्तावेज जिन्हें मैं जानता हूं, बस इसे एक विस्तार या औचित्य के साथ तथ्य के एक बिंदु के रूप में बताता है।

लेकिन यदि आप इसके बारे में सोचते हैं, तो कुछ और बेहतर क्यों होगा? ठीक है, मान लीजिए 10 पर्याप्त नहीं है। आपके पास (.) है जिसमें उच्चतम स्थिरता है और आप कुछ और चाहते हैं जो थोड़ा कड़ा हो। आप एक अतिरिक्त स्तर जोड़ते हैं, इसलिए आपका नया अधिकतम 10 है (भले ही अधिकांश फिक्सिटी केवल 9 पर जाएं)।

अब आपके पास 11 स्तर की प्राथमिकता है। (यह हास्यास्पद है। यह भी मजाकिया नहीं है।) यह 10 से कम मनमानी कैसे है? आपको और जोड़ने से रोकने के लिए क्या है? यदि आप मौजूदा लोगों के बीच नए स्तर चाहते हैं तो क्या होगा? निश्चित रूप से, आप अधिक जोड़ना जारी रख सकते हैं, अंततः आप खुद को infix↑ (ω + 2i) लिखते हुए सोचते हैं कि आपका जीवन कहां गलत हो गया है।

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

हास्केल में ऑपरेटरों जहां पूर्वता मामलों कई किसी न किसी तरह समूहों में से एक में गिर जाते हैं में से अधिकांश का उपयोग करता है:

  • ($) का आम उपयोग, जो आमतौर पर न्यूनतम अथवा अधिकतम पूर्वता जरूरत अन्य के साथ परस्पर विरोधी से बचने के लिए की तरह Pseudosyntactic ऑपरेटरों ऑपरेटरों।

  • मानक ऑपरेटरों का उपयोग करके अभिव्यक्तियां, या इसके विविधताएं, जहां मानक प्राथमिकता स्तरों का एक मुट्ठी भर मौजूद है और नए ऑपरेटरों को आम तौर पर समान स्तर साझा करना चाहिए जैसा कि वे आधारित हैं।

  • ईडीएसएल के लिए विशेष ऑपरेटर सेट, जिनके प्रतीक और प्राथमिकता स्तर आमतौर पर ईडीएसएल की प्रकृति को प्रतिबिंबित करने के लिए चुने जाते हैं और ऑपरेटरों के अन्य सेटों के साथ सह-अस्तित्व में होने की संभावना नहीं है।

वे सभी केवल कुछ प्राथमिकता स्तरों के साथ ठीक प्रबंधन करते हैं। सबसे महत्वपूर्ण बात यह है कि वे या तो अन्य ऑपरेटरों से प्रभावी ढंग से स्वतंत्र होने या अन्य ऑपरेटरों के बहुत सीमित सेट के साथ ही उपयोग किए जाते हैं। अधिक ऑपरेटरों में जोड़ना शुरू करें और उन्हें एकल अभिव्यक्तियों में एक साथ मिलाएं और बहुत जल्द लोग स्पष्ट ब्रांड्स का उपयोग शुरू कर देंगे क्योंकि वे याद नहीं कर सकते कि क्या अधिक कसकर बांधता है। खुद के लिए बोलते हुए, मैं पहले से ही ईडीएसएल-स्टाइल ऑपरेटरों (कहते हैं, Arrow संयोजक) को तार्किक ऑपरेटरों के साथ मिश्रित करते समय स्पष्ट रूप से संश्लेषण के लिए प्रवण हूं क्योंकि मुझे आमतौर पर प्रत्येक के सटीक प्राथमिकता स्तर को याद नहीं किया जा सकता है।

तो, स्थापित होने कि: 1) अतिरिक्त पूर्वता स्तरों के बहुत सारे है कि उपयोगी नहीं होगा, क्योंकि यह का ट्रैक रखने के लिए बहुत अधिक है, और 2) किसी भी सीमा हम लेने समान रूप से मनमाने ढंग से होने जा रहा है। .. क्यों 10?मैं अनुमान लगाने जा रहा हूं "क्योंकि फिर स्थिरता मान केवल एक अंक हैं"।

+3

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

+2

@ एमयू बहुत छोटा है: आह, यह "सबसे अधिक स्थिरता केवल 9 तक जाएगी"। :) अधिकांश एएमपीएस 10 तक जाते हैं, हालांकि, चूंकि रॉक संगीतकार 1 से 0 तक गिनते हैं, लेकिन सीमा बराबर है। (दरअसल, उस पैराग्राफ में बहुत सारे वाक्यांश रीढ़ की हड्डी की रेखाओं का अनुकरण कर रहे थे, लेकिन यह अधिक सूक्ष्म है) –

+0

मुझे लगता है कि जब कोई उन स्तरों की गणना करता है जो संख्याओं (योजक, गुणात्मक, घातीय), संबंधपरक ऑपरेटरों और तार्किक ऑपरेटरों के लिए आवश्यक हैं (&&, ||) पहले से ही छह स्तर हैं (शायद सात, यदि आप 'a Ingo

7

स्तरों की संख्या मनमाने ढंग से है, और जैसा कि मुझे याद है कि निर्णय यह था कि बहुत से स्तर सिर्फ यह याद रखना मुश्किल बनाता है कि ऑपरेटर कैसे बातचीत करते हैं। उदाहरण के लिए प्रोलॉग 1000 स्तरों की अनुमति देता है, लेकिन मैंने कभी नहीं पाया है कि हास्केल से कहीं बेहतर है।

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

+0

ईमानदारी से आंशिक आदेश इस बात के करीब लगता है कि मैं वास्तव में इसके बारे में क्या सोचता हूं। हालांकि मुझे यकीन नहीं है कि यह '($)' जैसे ऑपरेटरों को कैसे संभालेगा, जहां आप चाहते हैं कि यह "अधिकतर/अन्य सभी ऑपरेटरों से कम" हो। बस अनोखा महानतम/कम से कम प्राथमिकताएं बल्कि लचीली लगती हैं। –

+1

@camccann मैंने अभी तक इस तक एक संतोषजनक समाधान नहीं देखा है। तो हम जो भी हमारे पास हैं, उससे अटक गए हैं, जो कि ज्यादातर भाषाओं की तुलना में अभी भी बेहतर है। – augustss

+0

ओह, मैं उम्मीद कर रहा था कि आप उस भाग को भी समझ लेंगे। :] ओह अच्छा। जिस तरह से यह अब बिजली/जटिलता अनुपात के लिए स्थानीय अधिकतम के करीब है। –

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