2015-04-11 11 views
6

ठीक है, इसलिए मैंने पूरे दिन हास्केल भाषा रिपोर्ट (2010) के साथ खेलना और "रोचक" एज-केसों के सभी प्रकार ढूंढने में बिताया है। सामग्री जो आप सोचते हैं एक त्रुटि होनी चाहिए, लेकिन वास्तव में इसकी अनुमति है।हास्केल भाषा रिपोर्ट: आरक्षित

विशेष रूप से, शाब्दिक वाक्य रचना संदर्भ से निम्नलिखित अंश (खंड 10.2) पर विचार करें:

reservedid → case | class | data | default | deriving | do | else 
      | foreign | if | import | in | infix | infixl | 
      | infixr | instance | let | module | newtype | of 
      | then | type | where | _ 

आप पराक्रम कि सूची है & hellip में qualified देखने की उम्मीद; लेकिन यह वहां नहीं है। (उस मामले के लिए as या hiding है।)

अब मैं सोच रहा हूं और नरक; क्या यह रिपोर्ट में एक आकस्मिक निगरानी है? या यह एक जानबूझकर डिजाइन निर्णय है?

ऐसा प्रतीत होता है कि जीएचसी कम से कम विनिर्देश के पत्र का पालन करता है, क्योंकि यह आपको एक चर परिभाषित करने की अनुमति देगा, जिसका नाम qualified है। अजीब, लेकिन सच है। तो ऐसा लगता है कि यह नाम केवल एक संदर्भ पर "विशेष" है। इसके विपरीत, आप कभी एक चर module नाम कर सकते हैं। हम इस शब्द को केवल फाइल और नरकिप की शुरुआत में विशेष बना सकते थे; लेकिन हमने नहीं किया।

+0

दिलचस्प बात यह है कि ऐसा लगता है कि स्टैक ओवरफ्लो 'विदेशी' को कीवर्ड नहीं मानता है ... (आपको याद है, मुझे नहीं पता कि यह कौन सी भाषा है ऑटो-एक्सप्लोर किया गया है, इसलिए ...) – MathematicalOrchid

उत्तर

8

qualified, as और hiding केवल कीवर्ड के रूप में विशिष्ट स्थानों में होते हैं, इस प्रकार वेरिएबल नामों के रूप में उपयोग किए जा सकते हैं।

  • qualified केवल import के बाद होता है।
  • as के बाद ही import qualified PACKAGE
  • hiding केवल के बाद होता है तब होता है import [qualified] PACKAGE [as NAME]

मैं देख रहा हूँ तुम क्या मतलब है जब आप का कहना है module इन प्लेसमेंट-विशिष्ट कीवर्ड में से एक हो सकता है, लेकिन यह काउंटर सहज लगता है कुछ भी नाम module। शायद हास्केल के पिछले संस्करण में एक फ़ाइल में एकाधिक मॉड्यूल की अनुमति है?

एक qualified और hiding के लिए एक ही कह सकते हैं, लेकिन मैं as का उपयोग किया है एक बहुत है, इसलिए जैसे:

zip [] _ = [] 
zip _ [] = [] 
zip (a:as) (b:bs) = (a, b) : zip as bs 

तो, इस बात को ध्यान में साथ, मुझे लगता है कि यह वास्तव में एक डिजाइन निर्णय, एक है मुझे लगता है कि कई भाषाओं * सहित शामिल कर सकते हैं।

यह इंगित करने योग्य हो सकता है कि deriving इन शब्दों में से एक हो सकता है, क्योंकि यह हमेशा डेटा घोषणा के साथ-साथ foreign का पालन करता है, क्योंकि यह केवल एफएफआई एक्सटेंशन के साथ आरक्षित है।


* विशेष रूप से जावास्क्रिप्ट, के साथ यह huge list of mainly pointless reserved words है!

+1

मैं अक्सर अपने आप को फ़ाइल और आउट-फाइल के लिए 'if' और' of' का उपयोग करने का प्रयास करता हूं। जाहिर है, यह बुरी तरह विफल रहता है ... ;-) – MathematicalOrchid

+1

यह इतना नहीं है कि वे केवल विशिष्ट स्थानों में दिखाई दे सकें, लेकिन कोई भी सामान्य * पहचानकर्ता एक ही स्थान पर दिखाई नहीं दे सकता है। 'मॉड्यूल', 'व्युत्पन्न' और' विदेशी 'सभी तोड़ते हैं। –

4

सबसे पहले, "as", "hiding" और "योग्य" कीवर्ड हास्केल की मूल परिभाषा में नहीं थे। जब उन्हें जोड़ा गया तो उन्हें पीछे की संगतता के लिए आरक्षित शब्दों में नहीं बनाया गया था। आरक्षित शब्दों को जोड़ना कोड तोड़ने का एक निश्चित तरीका है। यह एक बहुत ही जानबूझकर निर्णय था।

दूसरा, जहां तक ​​मुझे पता है कि हास्केल प्रति फ़ाइल एकाधिक मॉड्यूल को मना नहीं करता है। विनिर्देश बस फाइलों के बारे में बात नहीं करता है। (लेकिन मुझे किसी भी कार्यान्वयन की जानकारी नहीं है जो इसे अनुमति देता है।)

+2

सबसे विशेष रूप से, 'as'' a' का बहुवचन है। मुझे यकीन है कि किसी ने कहीं इसका इस्तेमाल किया है। – MathematicalOrchid

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