Haskell Language
शुद्धता की घोषणा
खोज…
वाक्य - विन्यास
- infix [पूर्णांक] ops
- infixl [पूर्णांक] ops
- infixr [पूर्णांक] ops
पैरामीटर
घोषणा घटक | अर्थ |
---|---|
infixr | ऑपरेटर सही-सहयोगी है |
infixl | ऑपरेटर बाएं-सहयोगी है |
infix | ऑपरेटर गैर-सहयोगी है |
वैकल्पिक अंक | ऑपरेटर की बाध्यकारी मिसाल (सीमा 0 ... 9, डिफ़ॉल्ट 9) |
op1, ... , opn | ऑपरेटरों |
टिप्पणियों
परिचालकों और कार्यों को शामिल करने वाले भावों को पार्स करने के लिए, हास्केल ने यह घोषणा करने के लिए शुद्धता घोषणाओं का उपयोग किया कि कोष्ठक कहाँ जाता है। आदेश में, यह
- Parens में रैप एप्लिकेशन फ़ंक्शन
- एक ही पूर्वता के ऑपरेटरों द्वारा अलग किए गए शब्दों के समूहों को लपेटने के लिए बाइंडिंग प्रीटेंडेंस का उपयोग करता है
- उन ऑपरेटरों की सहानुभूति का उपयोग करके यह पता लगाने के लिए कि इन समूहों में पार्न्स को कैसे जोड़ा जाए
ध्यान दें कि हम यहाँ मानते हैं कि चरण 2 से किसी भी समूह में ऑपरेटरों को सभी की समान संगति होनी चाहिए। वास्तव में, हास्केल किसी भी कार्यक्रम को अस्वीकार कर देगा जहां यह शर्त पूरी नहीं हुई है।
उपरोक्त एल्गोरिथ्म के एक उदाहरण के रूप में, हम कोष्ठक जोड़ने की प्रक्रिया को 1 + negate 5 * 2 - 3 * 4 ^ 2 ^ 1
से जोड़ सकते हैं।
infixl 6 +
infixl 6 -
infixl 7 *
infixr 8 ^
-
1 + (negate 5) * 2 - 3 * 4 ^ 2 ^ 1
-
1 + ((negate 5) * 2) - (3 * (4 ^ 2 ^ 1))
-
(1 + ((negate 5) * 2)) - (3 * (4 ^ (2 ^ 1)))
हास्केल 98 रिपोर्ट के खंड 4.4.2 में अधिक विवरण।
संबद्धता
infixl
बनाम infixr
बनाम infix
वर्णन करता है कि किन पक्षों पर infixr
को समूहीकृत किया जाएगा। उदाहरण के लिए, निम्नलिखित निर्धारण घोषणाओं पर विचार करें (आधार में)
infixl 6 -
infixr 5 :
infix 4 ==
infixl
हमें बताता है कि -
infixl
छोड़ दी है, जिसका अर्थ है कि 1 - 2 - 3 - 4
रूप में पार्स हो जाता है
((1 - 2) - 3) - 4
infixr
हमें बताता है कि :
सही संगति है, जिसका अर्थ है कि 1 : 2 : 3 : []
रूप में पार्स हो जाता है
1 : (2 : (3 : []))
infix
हमें बताता है कि ==
हमारे बिना कोष्ठक सहित उपयोग नहीं किया जा सकता है, जिसका अर्थ है कि True == False == True
एक वाक्यविन्यास त्रुटि है। दूसरी ओर, True == (False == True)
या (True == False) == True
ठीक हैं।
एक स्पष्ट निर्धारण घोषणा के बिना ऑपरेटरों infixl 9
हैं।
बाइंडिंग मिसाल
संचालिका जानकारी के बाद की संख्या बताती है कि ऑपरेटर किस क्रम में लागू होते हैं। यह हमेशा 0
से 9
बीच होना चाहिए। इसे आमतौर पर ऑपरेटर को बांधने के तरीके के रूप में संदर्भित किया जाता है। उदाहरण के लिए, निम्नलिखित निर्धारण घोषणाओं पर विचार करें (आधार में)
infixl 6 +
infixl 7 *
चूँकि *
पास +
से अधिक बाध्यकारी मिसाल है +
इसलिए हम 1 * 2 + 3
पढ़ते हैं
(1 * 2) + 3
संक्षेप में, संख्या जितनी अधिक होगी, ऑपरेटर उसके दोनों ओर के पार्न्स को "खींच" देगा।
टिप्पणियों
फंक्शन एप्लिकेशन हमेशा ऑपरेटरों से अधिक बाँधता है, इसलिए
fx `op` gy
को(fx)
(gy)
op(fx)
op(gy)
रूप में समझा जाना चाहिए चाहे`op`
और इसकी नियत घोषणाएँ ही क्यों न हों।यदि बाइंडिंग पूर्ववर्तीता को एक फिक्स घोषणा में छोड़ दिया जाता है (उदाहरण के लिए हमारे पास
infixl *!?
) डिफ़ॉल्ट9
।
उदाहरण घोषणा
-
infixr 5 ++
-
infixl 4 <*>, <*, *>, <**>
-
infixl 8 `shift`, `rotate`, `shiftL`, `shiftR`, `rotateL`, `rotateR`
-
infix 4 ==, /=, <, <=, >=, >
-
infix ??