आपकी भाषा सिंटैक्स के आधार पर, विचार करने के लिए दो अलग-अलग मामले हैं। यदि आपकी भाषा फ़ंक्शन एप्लिकेशन (जैसे f(2+1)
) को इंगित करने के लिए कोष्ठक का उपयोग करती है तो पूर्वता अप्रासंगिक है। फ़ंक्शन को स्टैक पर धकेल दिया जाना चाहिए और इसके बाद पॉप आउट किया जाना चाहिए (उदाहरण के लिए ऊपर, परिणाम है 2 1 + f
)। वैकल्पिक रूप से आप फ़ंक्शन को एक मान के रूप में मान सकते हैं और इसे तुरंत आउटपुट कर सकते हैं, और नजदीकी कोष्ठक (जो अन्यथा किसी अन्य कोष्ठक के समान माना जाना चाहिए) के बाद एक फ़ंक्शन मंगलाचरण का उत्पादन करता है, उदाहरण के लिए f 2 1 + $
, जहां $
फ़ंक्शन मंगलाचरण ऑपरेशन है।
यदि आपकी भाषा, हालांकि फ़ंक्शन इन्वोकेशन को इंगित करने के लिए कोष्ठक का उपयोग नहीं करती है, लेकिन इसके बजाय फ़ंक्शन को सीधे किसी विशेष विराम चिह्न (जैसे f 2 + 1
) के बिना तर्क देता है , जैसा कि स्पष्ट रूप से विकिपीडिया के उदाहरण के लिए मामला है, तो चीजें थोड़ी अधिक जटिल हैं। ध्यान दें कि अभिव्यक्ति मैं बस दी, जैसा कि एक उदाहरण अस्पष्ट है: है च 2 के लिए आवेदन किया और 1 परिणाम को जोड़ा गया है, या हम 2 और 1 एक साथ जोड़ने और फिर फोन कर च परिणाम के साथ?
फिर, दो दृष्टिकोण हैं। आप फ़ंक्शन को केवल ऑपरेटर स्टैक पर धकेल सकते हैं जब आप इसका सामना करते हैं और इसे जो चाहें पूर्ववर्ती असाइन करें। यह सबसे सरल दृष्टिकोण है, और जाहिर है कि उद्धृत उदाहरण ने क्या किया है। हालाँकि, व्यावहारिक मुद्दे हैं। सबसे पहले, आप किसी फ़ंक्शन की पहचान कैसे करते हैं? यदि आपके पास एक परिमित सेट है तो यह आसान है, लेकिन यदि आपके पास उपयोगकर्ता परिभाषित कार्य हैं, तो इसका मतलब है कि आपके पार्सर को आपके वातावरण में वापस फीड करने की आवश्यकता है, जो जल्दी से गड़बड़ हो सकता है। और आप कई तर्कों के साथ कार्यों को कैसे संभालते हैं?
मेरी भावना यह है कि वाक्य रचना की इस शैली के लिए, फ़ंक्शन एप्लिकेशन ऑपरेटर द्वारा हैंडियर के रूप में फ़ंक्शन का उपयोग करना बहुत अधिक समझ में आता है। फिर, आप बस एप्लिकेशन ऑपरेटर को इंजेक्ट कर सकते हैं जब भी आप एक मूल्य पढ़ते हैं और आपके द्वारा पढ़ा गया आखिरी काम भी एक मूल्य होता है, तो आपको यह बताने के लिए किसी विशेष तरीके की आवश्यकता नहीं है कि कौन से पहचानकर्ता फ़ंक्शन हैं। आप उन अभिव्यक्तियों के साथ भी काम कर सकते हैं जो फ़ंक्शंस लौटाते हैं (जो फ़ंक्शन-अस-ऑपरेशन शैली के साथ मुश्किल या असंभव है)। और इसका मतलब है कि आप कई तर्क कार्यों को संभालने के लिए करी का उपयोग कर सकते हैं, जो सीधे उन्हें संभालने की कोशिश करने पर एक बड़ा सरलीकरण है।
केवल एक चीज जिसे आपको तय करने की आवश्यकता है, वह है फ़ंक्शन फ़ंक्शन की पूर्वता। चुनाव आप पर निर्भर है, लेकिन मैंने जिस भाषा का इस्तेमाल किया है, वह इस तरह से काम करती है, यह भाषा में सबसे मजबूती से चलने वाला ऑपरेटर है, और सही सहयोगी रहा है। (हास्केल होने का एकमात्र दिलचस्प भिन्नता है, साथ ही साथ दृढ़ता से बाध्यकारी संस्करण का वर्णन करने के लिए, इसके प्रतीक का एक पर्याय भी है $
जो भाषा में सबसे कमजोर बंधन ऑपरेटर है, अभिव्यक्ति f 2 + 1
को 2 f $ 2 + 1
से लागू करने और लागू करने की अनुमति देता है। बाकी सारी अभिव्यक्ति के लिए यह)
sin( max( 2 3) / 3 * 3.1415)