Haskell Language
फ़ंक्शन कॉल सिंटैक्स
खोज…
परिचय
हास्केल के फ़ंक्शन कॉल सिंटैक्स, जहां लागू सी शैली भाषाओं की तुलना के साथ समझाया गया है। यह उन लोगों के उद्देश्य से है जो सी-स्टाइल भाषाओं की पृष्ठभूमि से हास्केल में आ रहे हैं।
टिप्पणियों
सामान्य तौर पर, सी-स्टाइल फ़ंक्शन कॉल को हास्केल में परिवर्तित करने का नियम, किसी भी संदर्भ में (असाइनमेंट, रिटर्न, या किसी अन्य कॉल में एम्बेडेड), व्हाट्सएप के साथ सी-स्टाइल तर्क सूची में अल्पविराम को बदलने और उद्घाटन को स्थानांतरित करने के लिए है फ़ंक्शन नाम और इसके मापदंडों को समाहित करने के लिए C- शैली कॉल से कोष्ठक।
यदि कोई भी भाव पूरी तरह से कोष्ठक में लिपटे हुए हैं, तो कोष्ठक के इन (बाहरी) जोड़े को पठनीयता के लिए हटाया जा सकता है, क्योंकि वे अभिव्यक्ति के अर्थ को प्रभावित नहीं करते हैं।
कुछ अन्य परिस्थितियां हैं जहां कोष्ठक को हटाया जा सकता है, लेकिन यह केवल पठनीयता और स्थिरता को प्रभावित करता है।
मूल फ़ंक्शन कॉल में कोष्ठक
सी-स्टाइल फ़ंक्शन कॉल के लिए, उदाहरण के लिए
plus(a, b); // Parentheses surrounding only the arguments, comma separated
तब समतुल्य हास्केल कोड होगा
(plus a b) -- Parentheses surrounding the function and the arguments, no commas
हास्केल में, कोष्ठक स्पष्ट रूप से फ़ंक्शन अनुप्रयोग के लिए आवश्यक नहीं होते हैं, और केवल गणित की तरह, भाव भंग करने के लिए उपयोग किए जाते हैं; इसलिए ऐसे मामलों में जहां कोष्ठक अभिव्यक्ति के सभी पाठों को घेरता है, कोष्ठक वास्तव में आवश्यक नहीं होते हैं, और निम्नलिखित भी समतुल्य होते हैं:
plus a b -- no parentheses are needed here!
यह याद रखना महत्वपूर्ण है कि सी-शैली भाषाओं में, फ़ंक्शन
एम्बेडेड फ़ंक्शन कॉल में कोष्ठक
पिछले उदाहरण में, हमने कोष्ठकों की आवश्यकता समाप्त नहीं की, क्योंकि वे कथन के अर्थ को प्रभावित नहीं करते थे। हालांकि, वे अक्सर अधिक जटिल अभिव्यक्ति में आवश्यक होते हैं, जैसे नीचे।
सी में:
plus(a, take(b, c));
हास्केल में यह बन जाता है:
(plus a (take b c))
-- or equivalently, omitting the outermost parentheses
plus a (take b c)
ध्यान दें, कि यह इसके बराबर नहीं है:
plus a take b c -- Not what we want!
कोई यह सोच सकता है कि क्योंकि कंपाइलर जानता है कि take
एक फंक्शन है, यह जानने में सक्षम होगा कि आप इसे तर्क b
और c
पर लागू करना चाहते हैं, और इसके परिणाम को plus
।
हालांकि, हास्केल में, फ़ंक्शन अक्सर अन्य कार्यों को तर्क के रूप में लेते हैं, और कार्यों और अन्य मूल्यों के बीच थोड़ा वास्तविक अंतर किया जाता है; और इसलिए कंपाइलर आपके इरादे को सीधे नहीं मान सकता क्योंकि take
एक फंक्शन है।
और इसलिए, अंतिम उदाहरण निम्नलिखित सी फ़ंक्शन कॉल के अनुरूप है:
plus(a, take, b, c); // Not what we want!
आंशिक आवेदन - भाग १
हास्केल में, कार्यों को आंशिक रूप से लागू किया जा सकता है; हम एक ही तर्क के रूप में सभी कार्यों के बारे में सोच सकते हैं, और एक संशोधित फ़ंक्शन लौटा सकते हैं जिसके लिए वह तर्क स्थिर है। इसका वर्णन करने के लिए, हम निम्न प्रकार से कार्य कर सकते हैं:
(((plus) 1) 2)
यहां, फ़ंक्शन (plus)
को 1
यील्डिंग फ़ंक्शन ((plus) 1)
पर लागू किया जाता है, जिसे 2
लागू किया जाता है, फ़ंक्शन (((plus) 1) 2)
उपज देता है। क्योंकि plus 1 2
एक फ़ंक्शन है जो कोई तर्क नहीं लेता है, आप इसे एक सादा मूल्य मान सकते हैं; हालांकि हास्केल में, कार्यों और मूल्यों के बीच थोड़ा अंतर है।
अधिक विस्तार में जाने के लिए, फंक्शन plus
एक फ़ंक्शन है जो इसके तर्कों को जोड़ता है।
फ़ंक्शन plus 1
एक फ़ंक्शन है जो 1
को उसके तर्क में जोड़ता है।
फ़ंक्शन plus 1 2
एक फ़ंक्शन है जो 1
से 2
जोड़ता है, जो हमेशा मान 3
।
आंशिक आवेदन - भाग २
एक अन्य उदाहरण के रूप में, हमारे पास फ़ंक्शन map
, जो फ़ंक्शन और मानों की सूची लेता है, और फ़ंक्शन को सूची के प्रत्येक मान पर लागू करता है:
map :: (a -> b) -> [a] -> [b]
मान लें कि हम प्रत्येक मूल्य को एक सूची में बढ़ाना चाहते हैं। आप अपने स्वयं के फ़ंक्शन को परिभाषित करने का निर्णय ले सकते हैं, जो अपने तर्क में एक को जोड़ता है, और आपकी सूची में उस फ़ंक्शन को map
करता है
addOne x = plus 1 x
map addOne [1,2,3]
लेकिन अगर आपके पास addOne
की परिभाषा में एक और नज़र है, तो जोर देने के लिए कोष्ठक जोड़ा गया है:
(addOne) x = ((plus) 1) x
फ़ंक्शन addOne
, जब किसी भी मूल्य x
लागू किया जाता है, तो आंशिक रूप से लागू फ़ंक्शन plus 1
रूप में x
लागू होता है। यह साधन कार्यों addOne
और plus 1
समान हैं, और हम बस की जगह एक नया कार्य को परिभाषित करने से बच सकते हैं addOne
साथ plus 1
, अलग करने के लिए कोष्ठक का उपयोग करने के लिए याद plus 1
एक उपसूचक के रूप में:
map (plus 1) [1,2,3]