2011-11-15 19 views
23

f x y = x * y दें। हम इस फ़ंक्शन को दो तरीकों से लागू कर सकते हैं: f 5 6, या, इन्फिक्स नोटेशन का उपयोग करके, 5 `f` 6। क्या ऑपरेटर नियम इस अंतिम अभिव्यक्ति पर लागू होते हैं? इस एप्लिकेशन में क्या प्राथमिकता होगी? क्या यह फ़ंक्शन एप्लिकेशन का एक और रूप है, और क्या इसकी सर्वोच्च प्राथमिकता भी होगी?हास्केल इंफिक्स फ़ंक्शन एप्लिकेशन प्राथमिकता

मुझे लगता है कि संकलक इस विशेष रूप को देखता है (`` और/या एक अक्षर (?) से शुरू होने वाला नाम), और वास्तव में इसे ऑपरेटर पर विचार करने के बजाय सामान्य फ़ंक्शन एप्लिकेशन के रूप में व्यवहार करता है।

+2

हास्केल 98 वाक्य रचना आप पूर्वता स्तर का चयन की अनुमति देता है, विवरण के लिए http://www.haskell.org/onlinereport/decls.html#fixity देखें। –

+0

संपादन के लिए धन्यवाद अटल एस-जेड! – demi

उत्तर

22

Haskell 98 ReportOperator Applications पर एक अनुभाग है कि यह साफ करता है होते है:

एक ऑपरेटर या तो है एक ऑपरेटर प्रतीक, जैसे + या $$, या एक साधारण गंभीर लहजे में संलग्न पहचानकर्ता है (backquotes) , जैसे 'op`। उदाहरण के लिए, उपसर्ग अनुप्रयोग ओपी x y लिखने के बजाय, कोई इंफिक्स एप्लिकेशन x 'op` y लिख सकता है। यदि कोई फिक्सिटी घोषणा 'ओपी' के लिए दी गई है तो यह उच्चतम प्राथमिकता के लिए डिफ़ॉल्ट है और सहयोगीता छोड़ दी गई है (अनुभाग 4.4.2 देखें)।

अन्य उत्तर ने संकेत के रूप में, रिपोर्ट भी है कि आप उदाहरण के लिए, अपने खुद के स्थिरता को परिभाषित करने की अनुमति देता है Fixity Declarations पर एक अनुभाग है:

infixl 7 `op` 
9

यदि कोई स्पष्ट फ़िक्सिटी घोषणा नहीं दी जाती है, उदाहरण के लिए

infixl 7 `quot` 

एक backticked इन्फ़िक्स समारोह infixl 9 के डिफ़ॉल्ट स्थिरता है, तो एक ही स्थिरता के साथ किसी अन्य इन्फ़िक्स ऑपरेटर की तरह व्यवहार किया जाएगा।

+0

यह इन्फिक्स 9 के लिए डिफ़ॉल्ट क्यों है? क्या इस विकल्प के पीछे कोई कारण है, या यह मनमाने ढंग से है? – CMCDragonkai

+1

एक तरह से, यह निश्चित रूप से मनमाना है। लेकिन चूंकि यह 'इन्फिक्स' होने के कारण बिना किसी कोष्ठक के चेनिंग की अनुमति नहीं देता है, इसलिए सहयोगीता की दिशा रखना अधिक सुविधाजनक है। दाएं-सहयोगीता दुर्लभ है, इसलिए 'infixl' "कम से कम आश्चर्यजनक" पसंद है। 9 का प्राथमिकता स्तर उपसर्ग आवेदन प्राथमिकता के निकटतम है, इसलिए उपसर्ग अनुप्रयोग की तुलना में कम से कम परिवर्तन करता है। जब फैसला किया गया था तब मैं वहां नहीं था, लेकिन मुझे लगता है कि विचार यह है कि 'इंफिक्स 9' को उम्मीद के साथ चुना गया था कि यह सबसे सुविधाजनक है और कम से कम आश्चर्य का कारण बनता है। –

+0

मैं देखता हूं, लेकिन '!!' और '$' जैसी चीज़ों के बारे में क्या। क्या '!!' '' 'की तुलना में अधिक प्राथमिकता क्यों है? बस तालिका में ऑपरेटरों के सभी प्लेसमेंट के तर्क को समझने की कोशिश कर रहे हैं: https://www.haskell.org/onlinereport/decls.html#fixity – CMCDragonkai

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